ACM常见博弈(更新中)

大佬的博客
对比之下,感觉到羞耻,这个博客就平时我自己不记得翻翻看吧

巴什博弈(Bash Game)

题意:n 个石子,两人轮流取,可以自己挑选 1 到 m 个,谁取完最后一堆谁获胜.

结论:

n % ( m + 1 ) = = 0 n \% (m+1)==0 n%(m+1)==0 先手必败,否则必胜


尼姆博弈论(Nim Game)

题意:n 堆石子,每堆石子有a[i]个,每人轮流取,每次取某堆石子至少一个,最后取完者胜。

结论

a 1 ⨁ a 2 ⨁ . . . . ⨁ a n a_{1} \bigoplus a_{2} \bigoplus.... \bigoplus a_{n} a1a2....an不为0,则先手必胜,反之先手必败

证明

在此贴上大佬的博客
https://blog.csdn.net/k_koris/article/details/81743806

延伸

三堆石子a,b,c 且 a>b>c;
如果a ^ b ^ c不为0,则当前人必胜,令a=b ^ c;
则实现转移


威佐夫博奕(Wythoff Game)

题意:有两堆石子,有两种取法:
1.从一堆石子取走任意多颗(>=1)
2.从两堆石子取走相同的任意多颗(>=2)
最后取完者胜

结论

a k = ⌊ k ∗ ( 1 + 5 ) 2 ⌋ , b k = a k + k ( k = 0 , 1 , 2 , … , n 方 括 号 表 示 向 下 取 整 ) a_{k} =\left \lfloor \frac{k*(1+ \sqrt{5} )}{2} \right\rfloor,b_{k}=a_{k}+k(k=0,1,2,…,n 方括号表示向下取整) ak=2k(1+5 )bk=ak+kk=012,n)

若满足上述状态,必败,反之必胜

延伸

若当前状态为 ( x , y ) (x,y) (x,y),x<=y,求状态转移方法
若当前转态已经是必败态,就不需要转移了

  1. 从两堆取
    x > a y − x x>a_{y-x} x>ayx 则可以两堆都取 x − a y − x x-a_{y-x} xayx 个,变为 ( a y − x , a y − x + y − x ) (a_{y-x},a_{y-x}+y-x) (ayx,ayx+yx)
  2. 只能一堆取
    • 从 x 堆取
      y = b k , x > a k y=b_{k},x>a_{k} y=bk,x>ak,则从 x 堆取 x − a k x-a_{k} xak 个,变为 ( a k , b k ) (a_{k}, b_{k}) (ak,bk)
    • 从 y 堆取
      x = a k , y > b k x=a_{k},y>b_{k} x=ak,y>bk, 则从 y 堆取 y − b k y-{b_{k}} ybk 个,变为 ( a k , b k ) (a_{k}, b_{k}) (ak,bk)
      x = b k , n ! = m x=b_{k},n!=m x=bk,n!=m, 则从 y 堆取 y − a k y-a_{k} yak 个,变为 ( a k , b k ) (a_{k},b_{k}) (ak,bk)注意x,y交换了顺序 且当 n==m 时和 从x堆取一样的

至于 解 k ,x,y 不大直接递推吧


斐波那契博弈(Fibonacci Nim Game)

有一个堆n个石子(n>=2),第一个人可以取任意多个,但是不得一次性把所有石子取完,后一个取的石子数量不得超过第一个人的两倍,最后取完者胜/

结论

若n不是斐波那契数列的某一项,则必胜,反之必败

延伸

若n不是斐波那契数列的某一项,根据某一定理:当一个数不是Fibonacci数时,这个数必然等于若干个Fibonacci数之和,并且这些Fibonacci数在Fibonacci数列中都不相邻。
n = f ( a n ) + . . . + f ( a 2 ) + f ( a 1 ) n=f(a_{n})+...+f(a_{2})+f(a_{1}) n=f(an)+...+f(a2)+f(a1)
先手拿最小的斐波那契数 f ( a 1 ) f(a_{1}) f(a1),但是因为 f ( a 2 ) > 2 ∗ f ( a 1 ) f(a_{2})>2*f(a_{1}) f(a2)>2f(a1)
则后手不能一次性将 f ( a 2 ) f(a_{2}) f(a2)拿光,因此先手必胜,策略如上


Staircase Nim(阶梯博弈)

游戏开始时有许多硬币任意分布在楼梯上,共n阶楼梯从地面由下向上编号为0到n。游戏者在每次操作时可以将楼梯j(1<=j<=n)上的任意多但至少一个硬币移动到楼梯j-1上。游戏者轮流操作,将最后一枚硬币移至地上的人获胜。

结论

对奇数堆的石子进行Nim博弈,偶数堆不影响游戏的胜负

证明

大佬的博客


Moore’s Nimk

n堆石子,每次从不超过k堆中取任意多个石子,最后不能取的人失败。

结论

把n堆石子的石子数用二进制表示,统计每个二进制位上1的个数,若每一位上1的个数mod(k+1)全部为0,则必败,否则必胜。

证明

BB一句,感觉有点像Nim Game+Bash Game,但是有点对 N − > P N->P N>P 这个转移没搞懂
大佬的博客1
大佬的博客2


Anti-Nim (反Nim游戏)

取法和Nim相同,但是取走最后一颗的人输。

结论

一个状态为必胜态,当且仅当:
1)所有堆的石子个数为1,且NIM_sum=0
2)至少有一堆的石子个数大于1,且 NIM_sum≠0

证明
  • 当所有堆石子各位1且NIM_sum=0,等价于偶数堆,先手必胜, 满足结论 1)
  • 只有一堆石子个数>1,很容易推先手出必胜策略,满足结论 2)
  • 至少有两堆石子的个数>1,分别考虑两种情况,设sum为每堆石子的异或值
    • 当 sum=0,取完有两种结果 (设为状态 1)
      • 至少有两堆石子的个数>1,sum != 0
      • 只要一堆石子的个数>1,sum!=0 ,满足结论 1),先手必胜
    • 当sum != 0时 ( 设为状态 2)
      • 至少存在一种取法,使得至少存在两堆的石子数量>1且sum=0

很明显,状态1只会转移到状态2,当状态1不能转移到状态2则必败,而状态1只要能转移到状态2,则必定能由状态2转移到状态1,则sum=0必败.

看了大佬的博客才理解大佬的博客

Sprague-Grundy定理(SG定理)

我突然发现自己完全不会sg函数,我是谁,我在哪,我在干什么,sg函数是什么东西
贴上大佬的博客:大佬的博客

Every-sg

看着有点懵逼,在看看
参考文件

题目(+我觉得挺有意思的解题博客)

POJ:
取石子游戏
Matches Game   ps: a [ i ] > s u m ⨁ a [ i ] a[i]>sum⨁a[i] a[i]>suma[i]运算顺序居然是从左到右,而不是先算 s u m ⨁ a [ i ] sum⨁a[i] suma[i]
Nim
A multiplication game       厚着脸皮贴上我自己的博客
A Funny Game
A Chess Game     第一个接触 sg定理的题目,题意本来就让我看半天,让后百度半天博客看不懂什么所以然,最后让大佬指导,原来 sg 定理不是我学的那么浅显,之前 sg 只会它的定义,哭唧唧
S-Nim     又是sg函数
Georgia and Bob   有点难理解的阶梯博弈
A New Stone Game 又没推出来规律,都要靠百度的,类似对称博弈
Nim 自己推出来的sb规律,考虑还是不周到哎
John 反Nim模板题
Euclid’s Game 简单思维
Christmas Game

HDU:

Stone Game II 我想不出,看大佬博客才理解:大佬博客
Parallel Expectations
Digital Deletions 记忆化搜索
Play a game 哎,又没想到这个解释的很好
Stone Game sg函数板子题,但是我一直没有想到如何求sg值,思维太固化了,这个题目很好
Northcott Game sg+Nim,比较容易想得到
Brave Game Bash Game模板题
Good Luck in CET-4 Everybody! 简单题
Fibonacci again and again sg函数板子题
Rabbit and Grass Nim博弈板子题
Being a Good Boy in Spring Festival Nim板子题
kiki’s game 可以直接打表或者推规律
Public Sale 巴什博弈板子
取(m堆)石子游戏 和前面一个题目一样,Nim板子
取(2堆)石子游戏 威佐夫博奕以及状态转移

GG AND MM 不理解

ZJU 3057 beans game
bzoj 1022: [SHOI2008]小约翰的游戏John
http://nyoj.top/problemset?keyword=%E5%8F%96%E7%9F%B3%E5%AD%90

你可能感兴趣的:(ACM常见博弈(更新中))