博弈论瞎学

爆了哦。

SG 函数

用在公平组合游戏里。

大概是说:每个状态都有一个 \(\text{SG}\) 函数,其值等于所有后记状态的 \(\text{SG}\) 函数的 \(\text{mex}\)。同时,若当前状态的 \(\text{SG}\) 值为正数,则当前状态为必胜态;否则(当前状态的 \(\text{SG}\) 值为 \(0\)),当前状态为必败态。

证明一下,当前状态的 \(\text{SG}\) 值为正数时,其必可以转移到一个 \(\text{SG}\) 值为 \(0\) 的状态,否则必定会转移到 \(\text{SG}\) 值为正的状态。

经典的取石子游戏(取完最后一个的人胜)就是把 \(\text{SG}(0)\) 设为 \(0\) 算。然后改成取完最后一个的人败的话,好像只需要把 \(\text{SG}(0)\) 设为 \(1\) 就行了。


\(\text{SG}\) 定理:若一个博弈可分为多个独立子博弈,则整个博弈的 \(\text{SG}\) 值等于所有子博弈的 \(\text{SG}\) 值的异或和。

证明如下:

首先,若在任何情况下,我们都可以通过一步操作使得 \(\text{SG}\) 从非 \(0\) 变成 \(0\),则定理必定成立。接下来考虑如何证明这个事情。

设当前状态的 \(\text{SG}\) 值为 \(p\) 且其二进制最高位为第 \(k\) 位,则首先,当前状态必定至少存在一个子博弈,满足其二进制的第 \(k\) 位为 \(1\),这个显然。接下来,由前文定义得,对于任意小于该子状态的 \(\text{SG}\) 值的 \(\text{SG}\) 值,该子状态都可以一步转移到 \(\text{SG}\) 值为该值的状态。

于是,考虑将该状态大于 \(k\) 的位保持不变,第 \(k\) 位由 \(0\)\(1\)\(1\)\(k - 1\) 位变为值为 \(p - 2^{k - 1}\) ,取这样的一个 \(\text{SG}\) 值,并将这个状态转移过去,总状态的 \(\text{SG}\) 值将变为 \(0\)。容易发现这样的转移必定正确。


来点题。

  • ABC297G - Constrained Nim 2

    考虑子问题的 \(\text{SG}\) 函数。首先设有一个数量为 \(x\) 的石子堆,则:

    • \(x < l\) 时,\(\text{SG}\) 值显然为 \(0\)
    • \(l \le x < 2l\) 时,一步操作必然会转移到 \(x < l\) 的情况,故 \(\text{SG}\) 值为 \(1\)
    • \(2l \le x < 3l\) 时,一步操作会转移到上面的两种状态中,故 \(\text{SG}\) 值为 \(2\)

    以此类推,我们可以发现,当 \(x < l + r\) 的时候,\(\text{SG}\) 值就是 \(\lfloor \frac{x}{l} \rfloor\)。接下来考虑 \(x \ge l + r\) 的情况。

    • \(l + r \le x < 2l + r\) 时,显然先手必败,故 \(\text{SG}\) 值为 \(0\)
    • \(2l + r \le x < 3l + r\) 时,转移到 \(x < l + r\) 的话先手仍然必败,故先手必定会转移到 \(l + r \le x < 2l + r\) 的情况,\(\text{SG}\) 值为 \(1\)

    进一步地,设当前的状态 \(x\) 位于区间 \([p \times (l + r), (p + 1) \times (l + r))\) 时,感性理解可以发现,先手必定不会进行一步跃出这个区间的转移。理性分析就是跃出这个区间的话,因为它不会减去超过 \(r\) 的值,所以跃出这个区间后,\(\text{SG}\) 值必定比只考虑这个区间内的情况的 \(\text{SG}\) 值要大。

    故对于数 \(x\),其 \(\text{SG}\) 值为 \(\lfloor \frac{x \% (l + r)}{l} \rfloor\)。最终答案只需用 \(\text{SG}\) 定理求一下并判断即可。

考场上要学会打表观察 \(\text{SG}\) 函数的值,别再推你的策略了。

posted @ 2025-02-19 14:04  zyb_txdy  阅读(33)  评论(3)    收藏  举报