Nim 游戏
Nim 游戏
题目介绍
绝顶聪明的 Alice 和 Bob 在玩游戏,地上有 \(n\) 堆石子,第 \(i\) 堆石头有 \(a_i\) 个,每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取完,不能不取。每次只能从一堆里取,最后没石子可取的人就输了。
显然对于一个确定的初始石头数,先手必胜或必败是确定的,不存在平局。假如 Alice 是先手,请问在什么条件下 Alice 必胜,在什么条件下 Alice 必败。
大家可以先从一些简单的情况开始分析,例如显然 \(n=1\) 时,先手必胜,\(n=2\) 时若 \(a_1=a_2\) 则先手必败,否则先手必胜。
前置知识
定义一个数 \(x=\sum\limits_{i=0}^{n}a_i\cdot 2^i\) 的二进制表示为 \((a_na_{n-1}a_{n-2}\dots a_0)_2\),其中 \(a_i\in \{0,1\}\),显然 \(\forall x\in N\) 都有唯一的二进制表示与之对应。
例如 \(3\) 的二进制表示为 \((11)_{2}\),\(10\) 的二进制表示为 \((1010)_2\)。
定义二进制下异或运算为 “\(\oplus\)”,若 \(z=x\oplus y\),其中 \(x=(a_na_{n-1}\dots a_0)_2\), \(y=(b_nb_{n-1}\dots b_0)_2\), \(z=(c_nc_{n-1}\dots c_0)_2\),则若 \(a_i\) 与 \(b_i\) 均为 \(0\) 或 \(1\) 时 \(c_i\) 为 \(0\),否则 \(c_i\) 为 \(1\)。
例如 \(x=20=(10100)_2,y=13=(1101)_2\),则
可以将异或理解为不进位加法,显然异或运算满足交换律,即 \(x\oplus y=y\oplus x\),且对于 \(x\neq y\) 有 \(x\oplus y\neq 0,x\oplus x=0\)。
回到 Nim
先来说说 Nim 游戏的答案,令 \(\mathcal{T}=\oplus_{i=1}^n a_i\),若 \(T=0\) 则先手必败,若 \(T\neq 0\) 则先手必胜。
很神奇不是吗?如何证明呢?
对于 \(\mathcal{T}=0\),无论如何拿石子,拿完后 \(\mathcal{T}\) 都会变为非 \(0\) 的一个数。具体地,若拿的是第 \(i\) 堆石头,拿完后剩下 \(a_i'\)(\(a_i'<a_i\)) 个石头,则 \(\mathcal{T}'=\mathcal{T}\oplus a_i\oplus a_i'\neq 0\)。
对于 \(\mathcal{T}\neq 0\),总存在一种方法使得拿一次后 \(\mathcal{T}\) 变为 \(0\)。一种方法如下:若 \(\mathcal{T}\) 最高位为第 \(k\) 位,即 \(\mathcal{T}\) 在第 \(k\) 位为 \(1\),则一定存在 \(a_i\),其在第 \(k\) 位为 \(1\),令 \(a_i'=\mathcal{T}\oplus a_i\) 即可,此时 \(a_i'\) 一定小于 \(a_i\),且 \(\mathcal{T}'=\mathcal{T}\oplus a_i\oplus a_i'=0\)。
因此若初始时 \(\mathcal{T}\neq 0\),Alice 可以拿完后让 \(\mathcal{T}'=0\),无论 Bob 怎么拿,\(\mathcal{T}''\) 都会变为一个非 \(0\) 的数,Alice 再将其变为 \(0\)。如此进行,则总会将石头取完,\(\mathcal{T}=0\),Bob 没有石头可以取,先手 Alice 必胜。
若 \(\mathcal{T}=0\),无论 Alice 怎么拿,\(\mathcal{T}'\) 都会变为一个非 \(0\) 的数,回到上面的情况,Alice 必败。
综上 \(T=0\) 则 Alice 必败,\(T\neq 0\) 则 Alice 必胜。

浙公网安备 33010602011771号