链接
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4228
题解
Sprague-Grundy定理 组合游戏和的
S
G
SG
SG函数等于各游戏
S
G
SG
SG函数的
N
i
m
Nim
Nim和(即异或和)
这题的关键在于求出每个组合游戏的
S
G
SG
SG函数
打表发现,偶数位置的
S
G
(
x
)
=
x
2
SG(x)=\frac{x}{2}
SG(x)=2x,而奇数位置
S
G
(
x
)
=
S
G
(
⌊
x
2
⌋
)
SG(x)=SG(\lfloor\frac{x}{2}\rfloor)
SG(x)=SG(⌊2x⌋)
代码
//SG定理
#include <stdio.h>
#define maxn 110
#define ll long long
ll read()
{
ll x=0, c, f=1;
for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-1;
for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-48;
return f*x;
}
ll N;
ll sg(ll x){return (x&1)==0?x>>1:sg(x>>1);}
int main()
{
ll i, nim_sum=0, T;
T=read();
while(T--)
{
N=read();
nim_sum=0;
for(i=1;i<=N;i++)nim_sum^=sg(read());
if(nim_sum==0)printf("NO\n");
else printf("YES\n");
}
return 0;
}