博弈论简单入门sb总结
下午讲博弈论。没预习,GG。
整个下午都在学。
0
有一堆共n个石子,两个人轮流取石子,每个人一次可以取1到k个,取到最后一个石子的人胜利。
小学生都会的sb题。若k+1|n,后手必胜。否则先手必胜。
如果k+1|n,先手第一次取了a个的话,后手取k+1-a个就星了。最后先手GG
否则先手一开始取n%(k+1)个,再按照上面的方法来玩。
1
有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从一堆中取任意多个,取到最后一个石子的人胜利。
引入一个叫SG函数的东西。(好吧那叫SG
直接蒯了:
一个局面的SG为mex{后继局面的SG}。
mex运算为集合中没出现的最小的自然数。
几个局面的和的SG为它们的SG的异或和。
SG不为0时先手必胜,SG为0时后手必胜。
mdzz不会证
然后就很好球了。
设SG(i)为一堆i个石子的SG值。
SG(0)=0
SG(1)=mex{SG(0)}=1
SG(2)=mex{SG(0),SG(1)}=2
...
SG(i)=mex{SG(0),SG(1),...,SG(i-1)}=i
归纳法可证明SG(i)=i
所以把每堆石子的个数xor起来,非0则先手胜,是0则后手胜。
2
有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从一堆中取1到k个,取到最后一个石子的人胜利。
加了一个限制,实际上将每个a[i]都%=(k+1)就星了。
考虑感性证明,两个人互相取石子,一个人拿了x个,另一个人马上拿走k+1-x个。
然后还是异或。
3
有n堆石子,每堆a[i]个,两个人轮流取石子,每个人一次可以从至多m堆中取,每堆只能取1到k个,取到最后一个石子的人胜利。
首先啃腚可以a[i]%=k+1
emmmmm然后就很不爽了,这怎么做啊
考虑一下m=1的情况(2号情况)的方案
比如这几个SG值
01110110
10101011
10010100
xor起来是01001001
所以先手一开始取走01001001
即可,然后后手取了什么数位,先手也跟着取什么数位
最后先手一定会取到所有都是00000000
写到这吧
做几道题再来(咕咕咕