1. 程式人生 > 實用技巧 >Codeforces Round #659 (Div. 2) D GameGame

Codeforces Round #659 (Div. 2) D GameGame

題意:

給一個數組 兩個人輪流從裡面取數,取了的數不能再取

每個人有一個value

取了數之後要和value異或一下

最終value大的那個人 贏

題解:

每次取最高位的那個看即可,若最高位數量是偶數,無論怎麼取,兩個人這一位都一樣

所以取數量是奇數次的最高位

然後分情況手玩一下

#include <bits/stdc++.h>

using namespace std;
const int maxn=1e5+10;
int a[maxn];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        
int n; cin>>n; int x=0; for(int i=1;i<=n;i++) { cin>>a[i]; x^=a[i]; } int ans=0; if(x==0) {cout<<"DRAW"<<endl;continue;} while(x!=1) { x/=2; ans
++; } int sum=0; for(int i=1;i<=n;i++) { if((a[i]>>ans)&1) sum++; } if((sum-1)/2%2==0) cout<<"WIN"<<endl; else if(n%2==0) cout<<"WIN"<<endl; else cout<<"
LOSE"<<endl; } }