MENU

Solution. 取石子游戏

Description

$n$ 堆石子,第 $i$ 堆有 $a_i$ 个石子,颜色为 $c_i$。A 和 B 轮流行动,A 先手,每人有两种操作:

  • 选择一堆石子并从中取出任意个石子。
  • 选择一种颜色并从若干堆这种颜色的石子中取出不超过 $m$ 个石子。

不能不取。不能操作的人失败。

Solution

不同颜色的石子堆是独立的,所以考虑对每种颜色的石子堆单独考虑,然后再将 $SG$ 函数合并起来。

现在问题转化为,有若干堆颜色相同的石子,计算这个局面的 $SG$ 函数值。

第 $i$ 堆石子有 $a_i$ 个,设 $b_i=\lfloor\frac{a_i}{m+1}\rfloor,c_i=a_i\bmod (m+1)$,结论是,$SG$ 函数为:
$$
\left(\bigoplus_i b_i\right)\cdot(m+1)+\left(\sum_i c_i\right)\bmod(m+1)
$$
考虑归纳证明这个结论。对 $\sum a_i$ 进行归纳。

设 $P=\bigoplus_i b_i,Q=(\sum_i c_i)\bmod(m+1)$。

如果使用操作一,则 $P'$ 可以取到任意不大于 $P$ 的值,若 $P'<P$,则 $Q'$ 可以取任意值,否则我们不确定 $Q'$ 的取值范围,另外 $P',Q'$ 不可能同时不变。这样就证明了使用操作一可以转移到的状态的 $SG$ 函数值集合至少为 $[0,P(m+1)-1]$。

如果使用操作二,在 $P'=P$ 的情况下,我们显然可以让 $Q'$ 取到任意小于 $Q$ 的值,这样就补齐了 $[P(m+1),P(m+1)+Q-1]$ 的部分。

于是,当前状态的 $SG$ 函数值为 $P(m+1)+Q$,即开头提到的那个式子。

感性理解的话,操作一是 nim 博弈,操作二是 bash 博弈,所以 $SG$ 函数就是这两个基础博弈的缝合版。

Last Modified: May 2, 2023
Archives Tip
QR Code for this page
Tipping QR Code