例 1. \(\text{[AGC010D] Decrementing}\)
\(\mathtt{C202044zxy}\) 告诉我们,博弈题可以先从拓展必败/胜态的角度来思考,或者先考虑一些比较简单的情况(它说不定就是博弈的边界)。对于这道题,除以所有数的 \(\gcd\) 是很恼火的,我们先考虑黑板上存在 \(1\),这样就只剩下减一操作,那么胜负性就直接由 \(\sum a_i-1\) 的奇偶性决定。
之前提到 "它说不定是博弈的边界",所以我们对于每个状态,不妨只考虑 \(w=\sum a_i-1\) 的奇偶性。
现在我们可以思考,必败态的 \(w\) 的奇偶性是怎样的?显然为偶。那么,只要从一个状态开始,可以保持 \(w\) 为奇,这个状态就是必胜态。事实上,初态为奇就是一个必胜态。接下来阐述保持 \(w\) 为奇的策略:题中一个非常重要的条件是 初态的最大公约数为 \(1\)。首先 \(w\) 为奇的状态必有奇数个偶数(我们发现 \(a_i\) 为奇的数字对 \(w\) 的奇偶性没有影响),而且 至少有 \(1\) 个奇数,先手如果将偶数变成奇数,此时 \(\gcd\) 一定 不包含 \(2\)!于是操作之后必有偶数个偶数,而且 至少有 \(2\) 个奇数,那么此时无论后手变换奇数还是偶数必定至少剩下一个奇数,则 \(\gcd\) 还是不包含 \(2\),所以有奇数个偶数,这就又回到了初态。
通过上文的证明,我们可以进一步推知,当初态为偶时,先手必须变换一个奇数,而且 当且仅当全局只有一个奇数 时有效,就不再详细阐述了。
时间复杂度 \(\mathcal O(n\log^2 a)\),两只 \(\log\) 一个是递归层数,一个是 \(\gcd\).
例 2. \(\text{BZOJ - 1299 }\)巧克力棒
如果没有取出若干个巧克力棒的操作,这就是基础的 \(\rm nim\) 游戏。
而它最重要的一点是什么?考虑面对 \(\rm nim\) 和为零为什么先手必败,其实就是无论怎么吃巧克力棒,后手都可以维持给先手 \(\rm nim\) 和为零的状态。其中 "无论怎么吃" 隐含的限制是经过操作后 \(\rm nim\) 和不为零。
于是我们考虑,先取出 \(m\) 个巧克力棒,并使其 \(\rm nim\) 和为零。如果后手无论如何操作 \(\rm nim\) 和都不为零,先手就找到了必胜的策略。吃巧克力棒肯定是白费力气,那再取出一些巧克力棒呢?只要保证取出巧克力棒的 \(\rm nim\) 和不为零即可。
例 3. \(\text{HDU - 1079 Calendar Game}\)
题目大意:给定一个年月日(\(\text{from January 1, 1900 to November 4, 2001}\)),你可以选择月或者日中的一个让其增加 \(1\). 如果下个月没有当前的天数就不能移动月,到达 \(2001\) 年 \(11\) 月 \(4\) 日的人胜利,超过者失败。询问对于给定年月日,先手必胜还是必败。
模仿 例 1 的思路,尝试将年月日变成一个比较简单的量,事实上,题目中 "可以选择月或者日中的一个让其增加 \(1\)" 给了提示:将 \((\)月+日\()\) 的奇偶性当作判定标准。
先将年抛开不管,考虑一年中的情况。由于 \(11\) 月 \(4\) 日为奇状态,所以猜想开局为偶状态时先手必胜。但还是有几个特例:\(2\) 月 \(28\) 日、\(9\) 月 \(30\) 日、\(11\) 月 \(30\) 日。此时将它们的日加一,奇偶性是不变的。
事实上,我们只用考虑开局时为特例 \(9\) 月 \(30\) 日、\(11\) 月 \(30\) 日,其它情况按上文结论判断。这是因为,若先手为偶状态,它一定会设法走到非特例的奇状态,而这是一定可以办到的;若先手为奇状态,即使走到 \(2\) 月 \(28\) 日,后手仍然能走到奇状态。
例 4. \(\text{POJ - 1740 A New Stone Game}\)
题目大意:有 \(n\) 堆石子,每堆有 \(a_i\) 个。两人轮流操作,每次操作分两步:第一步从某堆中去掉至少一个石子;第二步(可省略)把该堆剩余石子的一部分分给其它的某些堆。最后无石子可取的一方即输。
不妨考虑博弈问题的 对称性。考虑两堆石子相等的情况,此时一定先手必败,因为后手可以做对称的操作将 \((m,m)\) 的局面变成 \((m-1,m-1)\). 拓展开来,称 "两堆石子相等" 为一对,只要 \(n\) 堆石子可以被分成若干完整的对,也是后手必胜。例:考虑 \((a_1,a_2),(a_3,a_4)\ \ (a_1=a_2,a_3=a_4)\),若先手在 \(3\) 堆取并分给 \(1\) 堆,那后手就在 \(4\) 堆取并分给 \(2\) 堆。
而对于其它情况都是先手必胜。考虑奇数堆石子,我们一定能用最多的一堆石子来补充前面的石子,使它们都变成完整的对。证明可以将石子堆画成柱状图,要补的部分一定不超过最多的石子数;对于偶数堆,把最多的石子削到和最少的石子一样多,最多的石子剩下的部分仍然可以参照奇数堆的结论。
\(\rm tbc.\)
浙公网安备 33010602011771号