「Luogu P2197」【模板】nim游戏

有$n$堆石子,第$i$堆有$a_i$个,$Alice$和$Bob$轮流取石子,$Alice$先取。每个游戏者只能取一堆石子,至少取一个,问哪个游戏者会赢。

链接

Luogu P2197

题解

最基础的Nim游戏,先手必赢当且仅当$a_1 \operatorname{xor} a_2 \operatorname{xor} \cdots \operatorname{xor} a_n \not = 0$,代码很短。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<bits/stdc++.h>
using namespace std;
typedef int ll;
ll test,cnt,res;
inline ll read()
{
register ll num=0,neg=1;
register char ch=getchar();
while(!isdigit(ch)&&ch!='-')
{
ch=getchar();
}
if(ch=='-')
{
neg=-1;
ch=getchar();
}
while(isdigit(ch))
{
num=(num<<3)+(num<<1)+(ch-'0');
ch=getchar();
}
return num*neg;
}
inline ll solve()
{
cnt=read();
for(register int i=0;i<cnt;i++)
{
res^=read();
}
puts(res!=0?"Yes":"No");
res=0;
}
int main()
{
test=read();
while(test--)
{
solve();
}
}