Nim 游戏及其变形
Nim:
\(n\) 堆物品,第 \(i\) 堆 \(a_i\) 个,两个玩家轮流取走任意一堆的任意个物品,但不能不取,不能操作者输。
结论:若 \(\oplus_{i=1}^n a_i \ne 0\),先手必胜,反之后手必胜。
证明: 显然终局满足情况。
那么当 \(\oplus_{i=1}^n a_i = k(k \ne 0)\) 时,我们只要令含有 \(k\) 最大位的 \(a_i \gets a_i \oplus k\) 即可出现 \(k = 0\) 的情况,后手必然会使得 \(k \ne 0\)。交替进行则后手必然输。
K-Nim:
\(n\) 堆物品,第 \(i\) 堆 \(a_i\) 个,两个玩家轮流取走任意 \(k\) 堆的任意个物品,但不能不取,不能操作者输。
结论:若 \(\sum_{bit = 1}^{val}\sum_{i = 1}^n ((a_i)_{bit}\mod(k + 1)) \ne 0\),先手必胜,否则后手必胜。
证明:可以类比 \(\rm Nim\) 的证明方法。
阶梯 Nim:
\(n\) 堆物品,第 \(i\) 堆 \(a_i\) 个,两个玩家轮流选择第 \(i\) 堆的任意个物品移动到 \(i - 1\) 堆,但不能不取,不能操作者输。(第 0 堆是垃圾桶)
结论:若 \(\oplus _{i = 1} ^ na_i[i \mod2 = 1] \ne 0\),先手必胜,否则后手必胜。
证明: 后手遇到先手必胜的情况,如果将偶数堆的物品丢到了奇数堆,先手可以把它再丢进偶数堆。
Anti Nim:
\(n\) 堆物品,第 \(i\) 堆 \(a_i\) 个,两个玩家轮流取走任意一堆的任意个物品,但不能不取,取到最后一个物品者输。
结论:一个状态是必胜态,当且仅当一下两种情况:
-
最大堆物品数量为 \(1\),且有偶数堆物品。
-
最大堆物品数量大于 \(1\),且 \(\oplus_{i=1}^na_i \ne 0\)。
证明:
\((1)\) 最大堆物品数量为 \(1\):
-
\(a.\) 物品堆数为偶数:先手必胜。
-
\(b.\) 物品堆数为奇数:先手必败。
\((2)\) 仅有一堆物品数量大于 \(1\):
此时显然有 \(\oplus_{i = 1}^n a_i\ne 0\)。
-
\(a.\) 有奇数堆物品:此时先手可以全部将最大堆的物品全部取光,转成 \((1)a.\) 了,先手必胜。
-
\(b.\) 有偶数堆物品:此时先手可以将最大堆的物品取得只剩一个,还是变为 \((1)a.\),先手必胜。
于是,在 \((2)\) 的情况下先手必胜。
\((3)\) 有两堆及以上的物品数量大于 \(1\):
-
\(a.\) \(\oplus_{i=1}^n a_i = 0\) 时:可能转化为 \((3)b.\) 或者 \((2)\)。
-
\(b.\) \(\oplus_{i=1}^n a_i \ne 0:\) 一定可以转化为 \((3)a.\)。
通过观察可以发现,若先手拿到的是 \((3)b.\) 的情况,则先手总是可以转化为 \((3)a.\) 的情况,使得后手最后只能将 \((2)\) 的局势交给先手。进一步可以推出 \((3)a.\) 为先手必败状态而 \((3)b.\) 是先手必胜状态。