John
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 1602 Accepted Submission(s): 874
Both of players are using optimal game strategy. John starts first always. You will be given information about M&Ms and your task is to determine a winner of such a beautiful game.
Constraints:
1 <= T <= 474,
1 <= N <= 47,
1 <= Ai <= 4747
2 3 3 5 1 1 1题意和结论:n对石子博弈的问题,最后一个取者为输! 输出赢者名子。
孤单堆:只有一个石子 充裕堆:大于一个石子
S0态,没有充裕堆,S1有一个充裕堆,S2有>=2个充裕堆(均在S态下)
T0态,充裕堆的个数为0,T2充裕堆个数>=2个(均在T态下)(没有只有一个充裕堆的情况)
必输态有: T2,S0 必胜态有: S2,S1,T0.
代码:
#include<stdio.h> int main(){ int i,n,c,a,T,s,flag; scanf("%d",&T); while(T--) { scanf("%d",&n); for(i=0,s=0,c=0;i<n;i++) { scanf("%d",&a); if(a>1) c++; s=s^a; } if(s!=0) {//S态 if(c>0) flag=1;//s2,s1态,。。。刚才这里写成了c==1||c==2,错了N次啊!!! else flag=0; } else {//T态 if(c==0) flag=1;//t0 else flag=0; } if(flag) printf("John\n"); else printf("Brother\n"); } system("pause"); return 0;
}