- #include
- #include
- #include
- #include
- #include using namespace std;
- const intMAXN=21+2;
- int T,N,p[MAXN],SG[MAXN],ans,cnt;
- boolmark[MAXN*MAXN];
- intCalc_SG(int x){
- if(SG[x]!=-1)return SG[x];
- memset(mark,0,sizeof(mark));
- for(inti=1;i)
- for(intj=1;j<=i;j++)
- mark[Calc_SG(i)^Calc_SG(j)]=1;
- for(inti=1;;i++)
- if(!mark[i])returnSG[x]=i;
- }
- int main(){
- memset(SG,-1,sizeof(SG)),SG[1]=0;
- for(inti=2;i<=MAXN;i++) SG[i]=Calc_SG(i);
- scanf("%d",&T);
- while(T--){
- ans=cnt=0;
- scanf("%d",&N);
- for(inti=1;i<=N;i++){
- scanf("%d",p+i);
- if(p[i]&1) ans^=SG[N-i+1];
- }
- for(inti=1;i)
- for(intj=i+1;j<=N;j++)
- for(intk=j;k<=N;k++){
- if(ans^SG[N-i+1]^SG[N-j+1]^SG[N-k+1])continue;
- cnt++;
- if(cnt==1) printf("%d %d %d\n",i-1,j-1,k-1);
- }
- if(!cnt) printf("-1 -1 -1\n");
- printf("%d\n",cnt);
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-1959849.html