| 比赛 |
期末考试4 |
评测结果 |
AAAAAAAAAATTTTTTTTTTTTTTT |
| 题目名称 |
区间消除 |
最终得分 |
40 |
| 用户昵称 |
PXCZM |
运行时间 |
16.570 s |
| 代码语言 |
C++ |
内存使用 |
8.79 MiB |
| 提交时间 |
2026-02-12 11:51:02 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n;
int a[3010];
bool check()
{
for(int i=1;i<=n;i++)
if(a[i]!=0&&a[i]!=1) return false;
return true;
}
bool ans[3010];
bool v[3010][3010];
void solve(int l,int r)
{
if(l==r)
{
ans[l]=1;
return;
}
if(v[l][r]) return;
for(int i=l;i<r;i++)
{
int tmp1=a[i]^a[l-1],tmp2=a[r]^a[i];
if(tmp1>=tmp2) solve(l,i);
if(tmp2>=tmp1) solve(i+1,r);
}
v[l][r]=1;
}
int main()
{
freopen("dump.in","r",stdin);
freopen("dump.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
int T;
cin>>T;
while(T--)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
if(check())
{
int sum=0;
for(int i=1;i<=n;i++) sum+=a[i];
for(int i=1,j=0;i<=n;i++)
{
if(sum%2)
{
if(a[i])
{
if(j%2) cout<<0;
else cout<<1;
}
else cout<<0;
}
else
{
if(a[i]) cout<<1;
else
{
if(j%2) cout<<0;
else cout<<1;
}
}
j+=a[i];
}
}
else
{
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
v[i][j]=0;
for(int i=1;i<=n;i++) ans[i]=0;
for(int i=1;i<=n;i++) a[i]^=a[i-1];
solve(1,n);
for(int i=1;i<=n;i++) cout<<ans[i];
}
cout<<'\n';
}
return 0;
}