Nim游戏博弈论
【模板】nim 游戏
题目描述
https://www.luogu.com.cn/problem/P2197
甲,乙两个人玩 nim 取石子游戏。
nim 游戏的规则是这样的:地上有 堆石子(每堆石子数量小于 ),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取。每次只能从一堆里取。最后没石子可取的人就输了。假如甲是先手,且告诉你这 堆石子的数量,他想知道是否存在先手必胜的策略。
输入格式
本题有多组测试数据。
第一行一个整数 (),表示有 组数据
接下来每两行是一组数据,第一行一个整数 ,表示有 堆石子,。
第二行有 个数,表示每一堆石子的数量.
输出格式
共 行,每行表示如果对于这组数据存在先手必胜策略则输出 Yes
,否则输出 No
。
样例输入 #1
2
2
1 1
2
1 0
样例输出 #1
No
Yes
思路
如果初态为必胜态,则先手必胜。
如果初态为必败态,即上式结果为0,则先手必败
证明:
- 必胜态一定可以给对手留下一个必败态
,设s的二进制为1的最高位为k
那么一定有奇数个的二进制位的第k位为1,我们使用替换,那么
同时可以保证
- 必败态一定给对手留下必胜态
因为必败态 ,看二进制位上面1的个数,相同位上面1的个数一定是偶数个,因此无论减少哪个数,异或和都不为0了,即给对手一个必胜态