尼姆博弈的性质。
最后一个取输。
若a1^a2^a3...^a4=0表示利他态T,不然为利己态S。
充裕堆:1个堆里的个数大于2.
T2表示充裕堆大于等于2,T1表示充裕堆大于等于1,T0表示无充裕堆。
S2表示充裕堆大于等于2,S1表示充裕堆大于等于1,S0表示无充裕堆。
必败态:T2,S0;
必胜态:S2,S1,T0;
#include<stdio.h> #include<string.h> int main() { int i,a,n,t; scanf("%d",&t); while(t--) { int ans,num1,num2; ans=0; num1=num2=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&a); if(a==1) num1++;//孤单堆 else num2++;//充裕堆 ans^=a; } if((ans!=0&&num2!=0)||(ans==0&&num2==0))//s1 s2 T0 printf("John\n"); else printf("Brother\n"); } }