可以发现,一颗石子可以看作是一个独立的游戏。
n
很小,瞎暴力求
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=105;
int _test,n,allsg,a[maxn],sg[maxn],vis[maxn],clk,ans,ans1,ans2,ans3;
int main(){
scanf("%d",&_test);
while(_test--){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sg[n]=0;
for(int i=n-1;i>=1;i--){
clk++;
for(int j=i+1;j<=n;j++)
for(int k=j;k<=n;k++) vis[sg[j]^sg[k]]=clk;
for(int j=0;j<=100;j++) if(vis[j]!=clk){ sg[i]=j; break; }
}
ans1=ans2=ans3=ans=0;
for(int i=n-1;i>=1;i--) if(a[i])
for(int j=n;j>=i+1;j--)
for(int k=n;k>=j;k--){
a[i]--; a[j]++; a[k]++;
allsg=0; for(int t=1;t<=n;t++) allsg^=(a[t]&1)*sg[t];
if(allsg==0){ ans++; ans1=i; ans2=j; ans3=k; }
a[i]++; a[j]--; a[k]--;
}
printf("%d %d %d\n%d\n",ans1-1,ans2-1,ans3-1,ans);
}
return 0;
}