Nim 游戏学习笔记

前置:公平组合游戏

定义:一个由两个人参与的游戏,两人轮流做出决策,游戏的所有信息都是公开的(即每个人都知道对方上一步做了什么并做出决策)。每个人在某一确定状态可以作出的决策集合仅与当前的状态有关,游戏以玩家无法行动为结束,且游戏一定会在有限步后结束,没有平局的情况。
若两人均用最优策略,在给出已知游戏条件时,游戏的胜负已知

Nim 游戏

一个公平组合游戏
nnn 堆石子,第 iii 堆石子有 aia_{i}ai 颗。两个人轮流取石子,每人每次可以从任意一堆中取任意颗石子扔掉,不能不取,无法操作者输,问先手必胜还是必败 / 有没有必胜策略?

解法

x=a1⊕a2⊕x = a_1 \oplus a_2 \oplusx=a1a2⊕\oplus ana_nan
操作有 333 种可能性:
1.1.1. 无法操作
当前操作者输,x=0x = 0x=0
2.x=02. x = 02.x=0 且有合法操作
若更改了 ai→ai′a_i \rightarrow a_i'aiaiai≠ai′a_i \neq a_i'ai=ai ,则操作完后的 x=x⊕ai⊕ai′≠x = x \oplus a_i \oplus a_i' \neqx=xaiai= 操作前的 xxx
所以任意操作后 x≠0x \neq 0x=0
3.x≠03. x \neq 03.x=0
大胆猜测:存在操作使得操作后 x=0x = 0x=0
证明:设 xxx 在二进制拆分下的最高位为第 kkk 位,则必然存在至少一个 1≤i≤n1 \leq i \leq n1in 使得 aia_iai & (1<<(k−1))(1 << (k - 1))(1<<(k1))ai⊕x<aia_i \oplus x < a_iaix<ai
所以可以从第 iii 堆中拿走 ai−(ai⊕x)a_i - (a_i \oplus x)ai(aix) 颗石子,即 ai→ai′=ai⊕xa_i \rightarrow a_i' = a_i \oplus xaiai=aix ,使得 x=x⊕(ai⊕ai′)=x⊕x=0x = x \oplus (a_i \oplus a_i') = x \oplus x = 0x=x(aiai)=xx=0

结论

当任意一人面对 x=0x = 0x=0 的情况时要么无法操作要么对方存在方案使 tatata 一直面对 x=0x = 0x=0 的情况直至无法操作
若在初始情况下 x=0x = 0x=0 ,先手必输,否则先手必胜

拓展:阶梯 Nim

nnn 堆石子在 nnn 级阶梯上,第 iii 级上的石子有 aia_{i}ai 颗。两个人轮流取石子,每人每次可以从任意一堆中将任意颗石子移到下一级上(从最后一级移下后石子消失),不能不移,无法操作者输,问先手必胜还是必败 / 有没有必胜策略?

解法(阶梯 Nim)

若这不是第一次移动,则上一步对手的操作有两种情况:
1.1.1. 移动偶数层上的石子
此时可以把对方移动的石子再往下移动到偶数层 / 消失,奇数层石子数量不变
不难发现,如果只能移动偶数层的石子,后手必胜(即先手在初始时或后手某次操作后无法进行操作,偶数层的石子数目是多少对答案的影响不变,均为 000
故偶数层的石子数量并不影响答案
2.2.2. 移动奇数层上的石子
既然偶数层对于答案没有影响,那么从奇数层往下移石子就相当于 Nim 游戏中的扔掉石子
用序列 aaa 中下标(从 111 开始)为奇数的 aia_iai 生成序列 bbb ,直接使用 Nim 游戏模板判断序列 bbb 的异或和是否为 000 即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值