Codeforces Round #659 (Div. 2) D GameGame
阿新 • • 發佈:2020-07-27
題意:
給一個數組 兩個人輪流從裡面取數,取了的數不能再取
每個人有一個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; } }