比赛 期末考试4 评测结果 AAAAAAAAAAEEEEEEEEEEEEEEE
题目名称 区间消除 最终得分 40
用户昵称 zhyn 运行时间 2.437 s
代码语言 C++ 内存使用 3.57 MiB
提交时间 2026-02-12 12:17:36
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 2005
int a,n;
ll c[maxn];
ll d[maxn];
ll e[maxn],f[maxn];
void solve(){
    cin>>a;
    d[0]=0;
    for(int i=1;i<=a;i++){
        cin>>c[i];
        d[i]=d[i-1]^c[i];
        e[i]=f[i]=0;
    }
    ll g=d[a];
    if(g==0){
        e[1]=f[a]=-1LL;
    }else{
        ll h=1LL<<(63-__builtin_clzll(g));
        e[1]=f[a]=h;
    }
    vector<int> h(a+1,0);
    if(a==1)h[1]=1;
    for(int i=a;i>=1;i--){
        for(int j=1;j+i-1<=a;j++){
            int k=j+i-1;
            ll l=d[k]^d[j-1]; 
            bool m=false; 
            if(i==a){
                m=true;
            }else{
                if((e[j]&l)||(f[k]&l)||(e[j]==-1LL)||(f[k]==-1LL)){
                    m=true;
                }
            }
            if(m){
                if(i==1){
                    h[j]=1;
                }else{
                    if(l==0){
                        e[j]=f[k]=-1LL;
                    }else{
                        ll n=1LL<<(63-__builtin_clzll(l));
                        e[j]|=n;
                        f[k]|=n;
                    }
                }
            }
        }
    }
    for(int i=1;i<=a;i++)cout<<h[i];
    cout<<"\n";
}
int main(){
	
	freopen("dump.in","r",stdin);
	freopen("dump.out","w",stdout);
	
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    while(n--){
        solve();
    }
    return 0;
}