废话
这是一个过于经典且过于常见的博弈论模型,入门博弈论的话,首先肯定是要知道这个的。
正题
N i m Nim Nim 游戏的规则:有 n n n 堆石子,第 i i i 堆石子有 a i a_i ai 个,每次可以从某一堆中取走若干个,先后手轮流取,最后无石子可取的人负。
首先给出结论:将这 n n n 堆石子的数量异或起来(即 a 1 x o r a 2 x o r . . . x o r x n a_1~xor~a_2~xor ~...~xor~x_n a1 xor a2 xor ... xor xn),假如不为 0 0 0,那么先手必胜,否则先手必败。
由于这东西的证明需要用到二进制,所以下面的证明都在二进制意义下讨论。
证明
首先要知道两个定义:
- 必胜态:双方足够聪明的情况下,在该状态时拥有操作权者必胜
- 必败态:双方足够聪明的情况下,在该状态时拥有操作权者必败
以及一些基础知识:如果一个状态能转移到任意一个必败态,那么该状态就是必胜态,如果不能,就是必败态。
在 N i m Nim Nim 游戏中,异或和不为 0 0 0 就是必胜态,否则是必败态。
先考虑必胜态怎么必胜:
假设他们异或起来为 k ( k ≠ 0 ) k (k\neq 0) k(k=0),且 k k k 的最高位为第 p p p 位,那么至少存在一个 a i a_i ai,满足 a i a_i ai 的第 p p p 位是 1 1 1,那么我们只需要让 a i a_i ai 异或上 k k k 即可,由于 a i a_i ai 的第 p p p 位是 1 1 1,所以 a i a_i ai 异或 k k k 肯定是减少了。
异或完后,所有石子的异或和就变成了 0 0 0,也就是必败态,由于能转移到必败态,所以一开始的状态为必胜态。
再考虑必败态为什么必败:
其实这个就简单很多了……由于此时异或和为 0 0 0,不管怎么拿,拿完之后肯定不为 0 0 0,也就是说,这个状态只能转移到必胜态,那么这个状态就是必败态了。
举个栗子
比如现在有 1 , 3 , 2 , 6 1,3,2,6 1,3,2,6 四堆石子,在二进制下就是 001 , 011 , 010 , 110 001,011,010,110 001,011,010,110,他们的异或和为 110 110 110,也就是 6 6 6。
此时先手操作, k k k 即 110 110 110 的最高位是第三位,找到第三位是 1 1 1 的数: 6 6 6,让它异或上 6 6 6,得到的就是 0 0 0,那么四堆石子数变成 1 , 3 , 2 , 0 1,3,2,0 1,3,2,0,此时他们的异或和为 0 0 0,满足要求,van美。
拓展题
(来自师兄的一场模拟赛)
题目大意:有一棵 n n n 个节点的树, 1 1 1 号点为根节点,其它点上分别放有若干个石子,两个人轮流操作,每次可以将某个节点上的若干个石子移动到这个节点的父亲上面,无法操作者负,问先手是否必胜。
题解:
观察发现,假如设根节点的深度为 1 1 1,那么深度为奇数的节点上的石子其实不影响答案,因为如果移动这上面的石子,那么另一个人再次移动这堆石子即可,这堆石子就永远在深度为奇数的节点上,若干次移动后就到了根节点,然而他们的移动并不会更改先后手顺序。
所以我们只需要考虑深度为偶数的节点上的石子即可,如果移动深度为偶数的节点上的石子,那么移动完之后这堆石子肯定会在奇数节点上,也就是说,这堆石子没用了。这等价于我们取走了这些石子。
诶,是不是开始很眼熟了?没错,这就是一个 N i m Nim Nim 游戏,不过不是用到所有的石子,只用到深度为偶数的节点上的石子罢了。
emm,简单吧,这就讲完啦qwq。