尼姆博弈
有三堆分别有 a,b,c 个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
结论
当 a ⊕ b ⊕ c == 0 时,先手必败;
反之,先手必胜。
理解
对于 a,b,c 三个数,我先假设 a 最大, b 第二大, c 最小,且 a,b,c 对应的二进制位数分别为 x,y,z
那么,要使得 a ⊕ b ⊕ c == 0,就得满足以下条件( a,b,c 的二进制形式都没有前导零的情况下):
(1) a 和 b 的二进制位数要一致,且 c 的二进制位数要小于 x,否则通过异或运算,不可能得到 a ⊕ b ⊕ c == 0,即 x == y 且 x > z 恒成立
(2)对于 a 和 b 的二进制形式下, a 和 b 的二级制数值从第 z+1 位到第 x 位要保持一致,否则不可能得到 a ⊕ b ⊕ c == 0
假设 a,b,c 分别对应第 1,2,3 堆
当 a ⊕ b ⊕ c == 0 时
先手先从第 1 堆里面取 k1 个物品