| 比赛 |
期末考试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;
}