http://poj.org/problem?id=2234
尼姆博弈(Nimm's Game) 指的是这样一个博弈游戏:有任意堆物品,每堆物品的个数是任意的,双方轮流从中取物品,每一次只能从一堆物品中取物品,最少取一件,取到最后一件物品的人获胜。
结论:把每堆物品数全部异或起来,如果得到的值为0,那么先手必败,否则先手必胜。
直接判定即可。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<iostream> 6 #include<map> 7 using namespace std; 8 int m ; 9 int main(){ 10 while(~scanf("%d",&m)){ 11 int x=0,y=0; 12 for(int i=1;i<=m;i++){ 13 scanf("%d",&x); 14 y^=x; 15 } 16 if(y==0){ 17 printf("No\n"); 18 } 19 else{ 20 printf("Yes\n"); 21 } 22 } 23 return 0; 24 }