博弈论&SG函数学习笔记(包含nim-k,mulit-nim,anti-nim,阶梯nim变形)
前言
其实有相当大一部分的博弈论都是可以抽象成Nim及其扩展问题的,剩下的小部分结合题目具体分析。
本文主要讨论Nim有关的题目
nim的原型题结论:若$a_1 \ xor \ a_2 \ xor... a_n=0$则先手必败,否则必胜
证明:
终止局面显然满足等式
如果一个局面$a_1 \ xor a_2 \ xor... a_n!=0$,那么无论他改变其中一个$a_i$等于剩下数字的异或和就能满足等式
如果一个局面$a_1 \ xor a_2 \ xor... a_n=0$,那么无论他改变$a_i$中的哪一个都会打破等式
方法1:将题目中的抽象为nim中的石头堆的
有些博弈论题,结合题目中的信息推导一些结论后,可以将原问题抽象为Nim问题
比如【BZOJ2281】【Sdoi2011】黑白棋 将棋子间的间隔抽象为石头堆
有些题目需要借助SG函数来抽象
即,将每一个状态用SG函数值表示出来。
若SG(x)=y,含义就是x可以转移到0~y-1的所有状态(像不像Nim游戏?),若SG(x)=0就说明无法转移,也就是输了。
这样可以将SG函数值本身看作石头堆
然后原问题就转化为了初始状态的SG异或和是否为0
递推解决即可
方法2:Nim游戏的一些变形
nim-k游戏
可以同时取最多k堆石头
结论:若满足:将$a_i$写成二进制,若对于每一个二进制位,所有的$a_i$那一位的1的数量%k=0,则先手必败,否则必胜
证明类比传统Nim游戏
mulit-nim游戏
每次选择一堆石头,将其分裂为几堆更小的。
结论:每堆石头的SG函数的后继集合等于每种分法产生的堆的异或和
即$SG(x)=mex(SG(a_1 xor ..a_{k_1}),SG(b_1 xor .. b_{k_2},...)$
然后递推SG函数求解即可
例题:【bzoj3576】[Hnoi2014]江南乐
anti-nim游戏
最后一个取石头的人输
一个状态为必胜态,当且仅当:(NIM_sum为所有石头数的异或和)
1)所有堆的石子个数为1,且NIM_sum=0
2)至少有一堆的石子个数大于1,且 NIM_sum≠0
阶梯nim游戏
每次将所取第i堆的石头转移到第i-1堆,到0停止
若所有奇数位的数异或起来,若不为0则必胜
证明:移入偶数堆的石头可以看做是被清除了
如果有人拿出来就再将其丢去下一个偶数堆,对局面不影响
之所以是偶数是因为0是偶数,移入0的石头无法再移出,不再有影响。
然后就是普通的Nim游戏了