题解:CF1383B GameGame

· · 题解

二进制操作考虑按位讨论。

可以证明在双方最优操作下,无论怎样,所选的数字一定相同。

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