rt,因为 4k⊕(4k+1)⊕(4k+2)⊕(4k+3)=0,所以后一半数据暴力,前十个点找一下存在的这种情况就过了???
int n;
int a[200005];
void Main() {
cin>>n;
if(n<=22){
REP(i,0,n)cin>>a[i];
REP(i,1,(1<<n)){
int p=0;
REP(j,0,n)if((i>>j)&1)p^=a[j];
if(p==0){
cout<<__builtin_popcount(i)<<endl;
REP(j,0,n)if((i>>j)&1)cout<<j+1<<' ';
cout<<endl;
return;
}
}
}
REP(i,0,n){
int x;
cin>>x;
a[x]=i+1;
}
if(a[1]&&a[2]&&a[3]){
cout<<3<<endl;
cout<<a[1]<<' '<<a[2]<<' '<<a[3]<<endl;
return;
}
REP(i,0,99997){
if(i%4)continue;
if(a[i]&&a[i+1]&&a[i+2]&&a[i+3]){
cout<<4<<endl;
cout<<a[i]<<' '<<a[i+1]<<' '<<a[i+2]<<' '<<a[i+3]<<endl;
return;
}
}
}
显然的 hack:
input:
24
9 10 11 12 16 20 100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 1700 1800
(后面一大串是因为特判了 n≤22)
possible ans:
6
1 2 3 4 5 6
output: