比赛 期末考试4 评测结果 AAAAAATTTTTTTTTTTTTTTTTTT
题目名称 区间消除 最终得分 24
用户昵称 彭欣越 运行时间 20.978 s
代码语言 C++ 内存使用 31.19 MiB
提交时间 2026-02-12 11:40:35
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3010;
int q,n,flag,cnt;
ll a[N],s[N][N],b1[N][N],b2[N][N];
void dfs (ll x,int l,int r) {
	if (l==1&&r==n) {
		flag=1;	
		return;
	}
	for (int i=l-1;i>=1;i--) {
		if (s[i][l-1]<=x) {
			dfs(x^s[i][l-1],i,r);
		}
		if (flag) return;
	}
	for (int i=r+1;i<=n;i++) {
		if (s[r+1][i]<=x) {
			dfs(x^s[r+1][i],l,i);
		}
		if (flag) return;
	}
	return;
}
int main () {
	freopen("dump.in","r",stdin);
	freopen("dump.out","w",stdout); 
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin >> q;
    while (q--) {
    	cin >> n;
    	flag=cnt=0;
    	for (int i=1;i<=n;i++) {
    		cin >> a[i];
    		if (a[i]==1) cnt++;
			if (a[i]>1) flag=1;	
		}
    	for (int i=1;i<=n;i++) {
    		ll sum=0;
    		for (int j=i;j<=n;j++) {
    			sum^=a[j];
    			s[i][j]=sum;
			}
		}
		/*
		for (int i=1;i<=n;i++) {
			for (int j=i;j<=n;j++) {
				b1[i][j]=a[i];
				b2[i][j]=a[j];
				for (int k=i;k<=j;k++) {
					b1[i][j]=min(b1[i][j],s[i][k]);
					b2[i][j]=min(b2[i][j],s[k][j]);
				}
				//cout << b1[i][j] <<' '<< b2[i][j] <<endl;
			}
		}
		*/
		if (!flag) {
			int sum=0;
			for (int i=1;i<=n;i++) {
				if (a[i]==1) {
					sum++;
					if ((sum-1)%2==0||(cnt-sum)%2==0) cout << 1;
					else cout << 0;
				}else{
					if (sum%2==0&&(cnt-sum)%2==0) cout << 1;
					else cout << 0;
				}
			}
			cout <<"\n";
		}else{
			for (int i=1;i<=n;i++) {
				flag=0;
				dfs(a[i],i,i);
				cout << flag;
			}
			cout <<"\n";
		}
		
	}
	return 0;
}