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.\) 是先手必胜状态。

Fib Nim

\(n\) 个石子,每次可以取出 \(\ge 1\) 的石子且取出的石子的个数小于等于上一次的两倍,先手不能全部取走,不能取的输。

Lemma:齐肯多夫定理

任意正整数都可以被若干个 不连续的 斐波那契数表示出来。

  • Proof:

    设该正整数为 \(n\),若 \(n\) 为斐波那契数自然满足条件。

    否则,我们找到最大的 \(i\) 满足 \(fib_i < n < fib_{i + 1}\),并令 \(n \gets n - fib_i\),重复该过程直到 \(n = 0\)。此时我们只需要说明连续两次操作不会选择到相邻的 \(fib_{i - 1}, fib_i\),考虑反证法。若连续取到 \(fib_i, fib_{i - 1}\),则第一次操作应当取到 \(fib_{i + 1}\),矛盾。

Narration

结论:先手必败当且仅当 \(n\) 为斐波那契数。

考虑 \(n = 1, 2\) 的情况,显然先手败。考虑归纳:

  • \(n\) 是斐波那契数:设 \(n = fib_i = fib_{i - 1} + fib_{i - 2}\),考虑先手取的数 \(x\)

    • \(x \ge fib_{i - 2}\):则后手直接一次取完。

    • \(x < fib_{i - 2}\):则留给后手的数显然是非斐波那契数,根据归纳假设先手必败。

  • \(n\) 不是斐波那契数:直接取成斐波那契数即可留给后手必败。

Extent

思考:第一个人 最小 取多少可以让后手必败?

我们考虑对 \(n\) 斐波那契分解,则我们取分解后的最小值。则后手每次取 \(x\) 时,我们就补全至第三大的数即可。是否可以更小?显然不可以,否则后手可以补成最小值获得一样的必胜态。

posted @ 2024-04-30 13:33  Little_corn  阅读(72)  评论(0)    收藏  举报