Note - 博弈论

巴巴博弈!

以下的“必胜”“必败”均指当前局面下先手必胜或必败。

Nim 游戏

应该是最基础和经典的博弈论。

为防止不知道 Nim 游戏,把 Nim 游戏的规则放在这:

地上有 \(n\) 堆石子,每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取。每次只能从一堆里取。最后没石子可取的人就输了。假如甲是先手,且告诉你这 \(n\) 堆石子的数量。判断是否存在先手必胜的策略。

转自 P2197 【模板】Nim 游戏

我们发现,一个局面必胜当且仅当先手可以通过一步将其转换成必败局面,同理一个局面必败当前仅当先手不能通过一步将其转换成必败局面

我们直接给出结论:当所有堆的石子个数异或和为 \(0\) 时,这个局面是必败的;反之,是必胜的。我也不是很清楚这个结论是怎么从无到有推出来的

以下称一个局面的异或和为一个局面所有堆的石子个数的异或和。

我们考虑一个平凡的必败局面,即 \((0, 0, \dots, 0)\)。显然这是必败的,因为你已经输了。显然这个局面的异或和为 \(0\)

然后我们发现,如果异或和不为 \(0\),那么我们可以通过 \(a_i \gets a_i \oplus s\) 的方式将其转化为异或和为 \(0\) 的局面。如果异或和为 \(0\),我们发现无论如何操作都不可能让异或和保持为 \(0\)。于是发现最优策略下的局面会在异或和为 \(0\) 与异或和不为 \(0\) 之间交替。又发现每次操作后石子总数至少减小 \(1\),所以最终必然会出现 \((0, 0, \dots, 0)\) 的局面。

\(s\) 的最高位为第 \(k\) 位,那么一定存在一个 \(a_i\) 使得 \(a_i\)\(k\) 位为 \(1\),把这个 \(1\) 异或为 \(0\) 后无论低位怎么变,\(a_i \oplus s\) 都不可能大于等于 \(a_i\),所以一定存在 \(a_i\) 使得 \(a_i \oplus s < a_i\),所以异或和不为 \(0\) 时的操作总是存在。

然后我们发现我们得出了 Nim 游戏的必胜策略。

posted @ 2026-04-17 22:05  Hootime  阅读(43)  评论(0)    收藏  举报