一、巴什博弈(Bash Game)
巴什是谁呢?这个不重要(我也不知道),巴什博弈的问题很简单,一堆石头,每人每次拿1~n个石头,谁先拿完就赢了。
模拟一下:M(石头数),n(一次最多能拿的石头数),现在M(5),n(3),我们先拿,那我们要怎么赢呢,先拿1剩4,这样对方拿多少我们下次都能拿完,必赢,也就是说M(4)必输(这就是对方的面临的现况),康康(振声)M(8),M(12),如果我们面临这样的情况,无论我们怎么选,对方都可以把我们的状态变成M(4),我1个对面就3个,我2个对面就2个,无赖啊(´・_・`),好吧这应该算智商压制,也就是M(n+1)是一种必输态,反过来不是必输就是必胜,因为你只需要一步就会让对方变成必输态,你看什么看,你也是无赖→_→。
PS:这个题目是先拿完win,也有先拿完lose的,思路是不一样的。
照样模拟:M(5),n(3),不同于上面,我们现在是要让对方拿最后一个石头(要不是只剩一个了,他会拿吗),M(1)必死wm只能憋屈赴死,M(2)拿一个win,M(3)拿两个win,M(4)拿三个win,M(5)好像。。必死了,那M(5)必死,同样找出必死态之后,让对方循环拿必死态就稳赢了,其实你应该注意到了,巴什博弈最先的M先减一,再用巴什分析不就好了吗,没错,巴什就是最后剩0,这个变化的版本就是最后剩1。其实思路是一样的,理解了才不会在上面栽跟头。
这个题目很简单,就不放代码了。
http://acm.hdu.edu.cn/showproblem.php?pid=2188
http://acm.hdu.edu.cn/showproblem.php?pid=2149
http://acm.hdu.edu.cn/showproblem.php?pid=1846
二、威佐夫博奕(Wythoff Game)
威佐夫。。同样迷一样的男人。
威(妄)佐(自)夫(菲)博(薄)奕(夜):两堆石头,每次可以选一堆拿任意个(四次元口袋,小场面),或者选两堆拿同样数量的石头,当然不可能拿成负数了啦,先拿完的获胜。
中等模拟:M(M1(第一堆石头数),M2(第二堆石头数)),M(M1(3),M2(5)),M1和M2本质是一样的,就记成M(3,5)小的房前,小的放钱,小的放前。。。
很明显M(0,0)是必死态(这他妈已经死了),M(0,n)必赢,M(n,n)必赢;
M(1,2)必死,M(1,3)让对面变成M(1,2)必赢,故而M(1,n(n>2))必赢;
M(2,3)让对面变成M(1,2)必赢,同上M(2,n)必赢(n在这个式子里比2大);
M(3,4)对面M(1,2)必赢,因为它们的差值(2-1)(4-3)相同,M(3,5)就不一样了,之前分析的除了M(1,2)外就没有必死态了,也就是说我们只能让对面变成非必输态(我好像输啊死啊的混用了,哎呀一个意思);M(3,n>5)让对面变成M(3,5)必赢;
嘿嘿嘿,差不多可以总结了,必死态就那么几个M(1,2)M(3,5)M(4,7)M(6,10)M(8,13)。。。,它们的差值1,2,3,4,5。。。;为什么它们没有相同的数字呢?很简单举个例子M(2,5)一定不是必死态,因为他只需一步就可以让对方变成必死态,而必死态一定是一步变不成的,所以必死态的描述里:必死态的式子前一个数字是之前未出现的最小正整数。(必死态就是奇异局势啦)
在前人的实验与证明后啊,我们得到了公式:
M1=(M2-M1)*黄金分割率(1.618034)
(sqrt(5)+1)/2)
sqrt的结果是double型的,不用写什么2.0,什么(double)的,这个情况就是必死态,反言之不必死就必赢。
这是先拿完获胜,先拿完失败呢,是不是只要把对方变成“必赢态”就好了呢?不是的,想一下对方M(1,1)我们是必死的,所以思路要发生一些转变,要让对方拿最后一个。
疯狂模拟:M(0,1)必死;M(0,n)必赢;
M(1,1)必赢;M(1,n)一步变M(1,0)必赢;
M(2,2)一步变不成之前唯一 的必死态,必死;M(2,n)一步变M(2,2)必赢;M(n>2,n)