nim石子游戏

n堆石子

每次操作可以从一堆石子中取任意个

不能操作者输

ans:把所有石子数量xor,为0先手必败,反之后手必败

必胜状态:存在一种方案走到对方的必败态

必败状态:所有方案都会走到对方的必胜态

 

现在证明结论

若莫得石子,xor=0,先手必败

若当前xor为0,那么操作一次xor就必定不再是0

若当前xir不为0,那么一定存在一种那石子方案使得xor变成0

1 3 4=》6

1 3 2=》0

xor最高位的1,找到一个数的这一位是1

将这个数变为x xor y

就是把这个数操作一下,就可以直接影响xor值

 

sg函数

当sg=0时,先手必败,否则先手必胜

设状态a为先手操作一部之后可能变成的状态集合

a={b,c,d,.....}

sg(a)=mex{sg{b},sg{c},...}

你可能感兴趣的:(nim石子游戏)