题解:CF1383B GameGame
endswitch
·
·
题解
二进制操作考虑按位讨论。
可以证明在双方最优操作下,无论怎样,所选的数字一定相同。
令 c 为其出现次数。
-
此时先手无论如何都会选偶数次 `1`(若先手选 `0` 则后手跟选,一定会回到初始的状态),即先手必输。
$\circ$ 若 `0` 的数量为奇数:
则先手可以先选择一个 `0` 使得后手成为先前那种情况的“先手”,即先手必胜。
2. $c \equiv 1 \pmod 4$:
则先手选择的 `1` 的数量一定为奇数,后手的一定为偶数,即先手必胜。
综上,从高位向低位模拟即可。
代码:
```cpp
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;
int T, n, a[N];
signed main() {
ios_base :: sync_with_stdio(NULL);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> T;
while(T --) {
int x = 0;
cin >> n;
for(int i = 1 ; i <= n ; ++ i)
cin >> a[i], x ^= a[i];
if(! x) {
cout << "DRAW\n";
continue;
}
for(int i = 30 ; ~ i ; -- i)
if((x >> i) & 1) {
int k0 = 0, k1 = 0;
for(int j = 1 ; j <= n ; ++ j) {
if((a[j] >> i) & 1) ++ k1;
else ++ k0;
}
if(k1 % 4 == 3 && (k0 % 2 == 0)) cout << "LOSE\n";
else cout << "WIN\n";
goto place;
}
place:;
}
return 0;
}
```