经典的尼姆问题是谁哪拿到最后一个则谁赢,本题是拿最后一个的输。
下面分析第二种情况:
1.初始给的是奇异局势的话,则先取者拿到最后一个为输。
2.初始给的是非奇异局势的话,则先取者为赢。
对于任何奇异局势(a,b,c),都有a^b^c=0(^是代表异或).
非奇异局势(a,b,c)(a
#include<iostream>
using namespace std;
int main()
{
int n;
int sum;
int m[101];
int i;
int f;
while(cin>>n)
{
sum=0;
f=0;
for(i=1;i<=n;i++)
{
cin>>m[i];
sum^=m[i]; //位运算,判断是否为奇局势
if(m[i]>1) f=1;
}
if(f==0) //每堆均为 1
{
if(n%2==0) cout<<"Yes"<<endl; //n位偶数 先取者必赢
else cout<<"No"<<endl; //n为奇数 先取者输
}
else
{ //不都为1
if(sum==0) cout<<"No"<<endl; //奇局势 先取者必输
else cout<<"Yes"<<endl; //偶局势 先取者必赢
}
}
return 0;
}