hdu 5011 Nim+拿完分堆

http://acm.hdu.edu.cn/showproblem.php?pid=5011

有N堆珠子,两个人轮流拿,最少拿一个,可以全拿,每次只能从一个堆里拿,不能从多堆同时拿;拿完之后该人还有一个操作,对操作的堆要么不动要么将该堆分成两部分(不一定均分),谁最后一个拿完谁获胜。
而无论怎么划分,划分过后的个数是不变的,所以直接对原来的堆数之间进行异或运算,结果为1,则第一个操作的人获胜,结果为0,第二个操作的人获胜。

#include<iostream>
using namespace std;
int main(){
    int i,t,n,k,m;
    while(cin>>n){
        m=0; t=0;
        for(i=0;i<n;i++){
            cin>>k;
            if(k>=1) t++;
            m^=k;
        }
        if((m==0&&t>=2)||(m!=0&&t==0))
            cout<<"Lose
";
        else
            cout<<"Win
";
     }
     return 0;
 }


原文地址:https://www.cnblogs.com/zibaohun/p/4046803.html