自爆魂

博客园 首页 新随笔 联系 订阅 管理

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\n";
        else
            cout<<"Win\n";
     }
     return 0;
 }


posted on 2014-10-15 19:29  自爆魂  阅读(128)  评论(0编辑  收藏  举报