Be the Winner
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2910 Accepted Submission(s): 1608
Problem Description
Let's consider m apples divided into n groups. Each group contains no more than 100 apples, arranged in a line. You can take any number of consecutive apples at one time.
For example "@@@" can be turned into "@@" or "@" or "@ @"(two piles). two people get apples one after another and the one who takes the last is
the loser. Fra wants to know in which situations he can win by playing strategies (that is, no matter what action the rival takes, fra will win).
For example "@@@" can be turned into "@@" or "@" or "@ @"(two piles). two people get apples one after another and the one who takes the last is
the loser. Fra wants to know in which situations he can win by playing strategies (that is, no matter what action the rival takes, fra will win).
Input
You will be given several cases. Each test case begins with a single number n (1 <= n <= 100), followed by a line with n numbers, the number of apples in each pile. There is a blank line between cases.
Output
If a winning strategies can be found, print a single line with "Yes", otherwise print "No".
Sample Input
2 2 2 1 3
Sample Output
No Ye题目大意:同样的尼姆博弈意思。先手必胜是 yes 否则是 no思路:同样尼姆博奕,代码都不用改。感想:刚才看了一整自习课的 SG 函数,还是不怎么理解,1847 这个就是用 SG函数的简单应用来着,让我再想想吧~今天下午还以为无知的掌握了博弈论,想想真的好搞笑,刚入门而已...AC代码:#include <iostream> using namespace std; int main() { int T,N,i,a[50],sum,k; while (cin>>N) { k=0;//孤单堆的数量 sum=0; for (i=0;i<N;i++) { cin>>a[i]; sum^=a[i]; if (a[i]>1) { k=1;//如果不全部是孤单堆 } } if (k==0) //对于全是孤单堆的情况 { if (N%2==0) { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } } else { if (sum==0) //对于奇异局势的情况下 { cout<<"No"<<endl; } else //对于非奇异局势的情况下 { cout<<"Yes"<<endl; } } } return 0; }