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;
 }


相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-29
  • 2021-09-24
  • 2021-09-20
  • 2022-02-27
  • 2021-11-23
猜你喜欢
  • 2021-09-10
  • 2022-01-12
  • 2021-11-13
  • 2021-09-08
  • 2021-12-12
相关资源
相似解决方案