『算法-ACM竞赛-数学』博弈论-巴什博奕(BashGame)

『算法-ACM 竞赛-数学』博弈论-巴什博奕(BashGame)

数学–博弈论–巴什博奕(Bash Game)

终于也轮到我做游戏了,他们做了好几个月的游戏了。

巴什博弈:

两个人做游戏,取石子,一个人最多可以可以取 M 个,至少取 1 个,最后取完的赢。

显然,如果 n=m+1,那么由于一次最多只能取 m 个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果 n=(m+1)r+s,(r 为任意自然数,s≤m),那么先取者要拿走 s 个物品,如果后取者拿走 k(≤m)个,那么先取者再拿走 m+1-k 个,结果剩下(m+1)(r-1)个,以后保持这样的取法,那么先取者肯定获胜。总之,要保持给对手留下(m+1)的倍数,就能最后获胜。

举例 1:先手必胜(如果是傻子就好说了)

终结数 30 ,最大可以取 3 个,最少取 1 个

经过上面的公式推算- 3+1=4(m+1)

正常人:

如果先手足够聪明,那么他一定会胜利,他可以保证每次留给你剩下的数都是 4 的倍数 取 2 留 28,取 6 留 24,取 10 留 20,取 14 留 16,取 18 留 12,取 22 留 8,取 26 留 4,先手只要取到这些点必输。

康宝斌:

如过先手不够聪明,留给后手反击的机会,后者就可以通过先手的失误,先达到上面的点。

总结 谁先给对手留(m+1)倍数的数,谁就先胜利

一个人拿 1 ~ m 个,那谁面对 m+1 的局势的的时候则必败。假设 n=k*(m+1)+s,(k 为任意,s<m+1),那我(先手)先把那个 s 个拿掉,然后让另一个人拿,从现在开始,只要我每次拿的个数与前面一个人拿的个数和等于 m+1,这样后拿的必定面对必败局势,即到最后另一个人拿完后肯定是剩 t(t<m)个给我,那就是我赢。

举例 2:先手必输

我们考虑这种情况:

终结数 20 ,最大可以取 3 个,最少取 1 个。

无论我去多少个,我不能留给我对手 K(M+1)个,这样的后果是,我会面对 K(M+1)的情况,也就是我必输。

总结:

那我们讨论一下什么时候必输,什么时候必赢。

当我一开始就面对 K(M+1)的局势,相当于对面给我制造了 K(M+1)的局势,而我是先手。

所以判断终止数%(M+1)=0?来判断先手必输,还是必赢。


『算法-ACM竞赛-数学』博弈论-巴什博奕(BashGame)
https://chiamzhang.github.io/2024/06/29/『算法-ACM竞赛-数学』博弈论-巴什博奕(BashGame)/
Author
Chiam
Posted on
June 29, 2024
Licensed under