poj-2234

来源:互联网 发布:爱普生打印机端口设置 编辑:程序博客网 时间:2024/06/06 10:40

此题属于尼姆博奕(Nimm Game):有n堆各若干个物品,两个人轮流从某一堆取任意多(或者最多m个,只需把每堆%m)的物品,规定每次至少取一个,多者不限,最后取光者得胜。  

强记策略: n堆物品数量对应的n个二进制数,连续n-1次异或运算,若结果为0,则说明所有位平衡,后者获胜,若结果为1,则说明存在非平衡位,前者获胜。

#include<iostream>using namespace std;int main(){int n;while(cin>>n)//输入火柴堆数 {int a=0,b;//b表示当前堆的火柴数 for(int i=0;i<n;i++)//输入每堆火柴的数量 {cin>>b;a^=b; //异或当前堆的火柴数 }if(a)//若a出现非平衡位则先手的玩家赢 cout<<"Yes"<<endl;elsecout<<"No"<<endl;} return 0;} 


0 0