题目描述:
最近阿笠博士发明了一种新的游戏,他邀请步美(ayumi)和柯南(conan)来玩。 游戏的规则是这样的。有一堆石子,石子的总数是n(0< n< =30)个。步美和柯南轮流从这堆石子中拿走m*m个石子(m必须是一个正整数)。假如在轮到某个人取石子的时候,这个人没有石子可以取(也就是石子已经被另一个人在上次取光了),则这个人就是失败者。 两个人开始玩游戏,每次都是步美先取,柯南再取(女士优先嘛)。并且两个人都非常聪明,他们每次总是以最有利于自己获胜的策略取石子。 玩了几次之后,柯南很快发现,游戏的胜负其实之和一开始石子的总数n有关。也就是说,只要给出了n,他就可以知道谁是最后的胜利者。怎么样,你发现了其中的规律吗? 柯南用他的推理能力用脑子就可以得到答案了,现在,允许你用计算机写程序解答。问题是,给出一开始的石子总数n,由你来判断最后的胜利者。
输入
输入由多组测试数据组成。 第一行是一个数number,表示测试数据的组数。 接下来是number行,每一行是一个整数n(0 < n < = 30),表示石子总数。
输出
对于每一组输入,对应一行输出。 假如最后的获胜者是步美,则输出ayumi win 假如最后的获胜者是柯南,则输出conan win
样例输入
4
25
2
5
27
样例输出
ayumi win
conan win
conan win
ayumi win
错误思想
第一题就难住了,我之前看到过类似去石头,但是没有遇到去拿整数平方的题,所以我的思想就变了:
错误思想:我将每一个输入都分解成所有正整数的平方和,假如个数为奇数就是A赢,偶数是B赢,但是这是错的,举个例子,8按我的思想或者代码,会直接分解成4+4,这样B就赢了,但是A是很聪明的人,她会先取1个,在让B取,就是1+4+1+1+1,或者1+1+4+1+1或者1+1+1+1+4或者1+1+1+4+1,无论怎样都是A赢,网上唯一能找的人也是这个思想,但是他没发现自己的错误,而是用了穷举。![]()
今晚回去仔细看一下Nim问题:https://blog.youkuaiyun.com/Summer__show_/article/details/70185470
昨天晚上大致看了一下NIM问题:
通常的Nim游戏的定义是这样的:有若干堆石子,每堆石子的数量都是有限的,合法的移动是“选择一堆石子并拿走若干颗(不能不拿)”,如果轮到某个人时所有的石子堆都已经被拿空了,则判负(因为他此刻没有任何合法的移动)。
这游戏看上去有点复杂,先从简单情况开始研究吧。如果轮到你的时候,只剩下一堆石子,那么此时的必胜策略肯定是把这堆石子全部拿完一颗也不给对手剩,然后对手就输了。如果剩下两堆不相等的石子,必胜策略是通过取多的一堆的石子将两堆石子变得相等,以后如果对手在某一堆里拿若干颗,你就可以在另一堆中拿同样多的颗数,直至胜利。如果你面对的是两堆相等的石子,那么此时你是没有任何必胜策略的,反而对手可以遵循上面的策略保证必胜。如果是三堆石子……好像已经很难分析了,看来我们必须要借助一些其它好用的(最好是程式化的)分析方法了,或者说,我们最好能够设计出一种在有必胜策略时就能找到必胜策略的算法。
昨天花了大量时间弄懂N-position(next)和P-position (previous)上,
上一次move的人有必胜策略的局面是P-position,也就是“后手可保证必胜”或者“先手必败”;对于当前要move的人是先手
现在轮到move的人有必胜策略的局面是N-position,也就是“先手可保证必胜”。
更严谨的定义是:1.无法进行任何移动的局面(也就是terminal position)是P-position;2.可以移动到P-position的局面是N-position;3.所有移动都导致N-position的局面是P-position。
以Nim游戏为例来进行一下计算。比如说我刚才说当只有两堆石子且两堆石子数量相等时后手有必胜策略,也就是这是一个P-position,下面我们依靠定义证明一下(3,3)是一个P-position。首先(3,3)的子局面(也就是通过合法移动可以导致的局面)有(0,3)(1,3)(2,3)(显然交换石子堆的位置不影响其性质,所以把(x,y)和(y,x)看成同一种局面),只需要计算出这三种局面的性质就可以了。 (0,3)的子局面有(0,0)、(0,1)、(0,2),其中(0,0)显然是P-position,所以(0,3)是N-position(只要找到一个是P-position的子局面就能说明是N-position)。(1,3)的后继中(1,1)是P-position(因为(1,1)的唯一子局面(0,1)是N-position),所以(1,3)也是N-position。同样可以证明(2,3)是N-position。所以(3,3)的所有子局面都是N-position,它就是P-position。通过一点简单的数学归纳,可以严格的证明“有两堆石子时的局面是P-position当且仅当这两堆石子的数目相等”。
游戏人I每次将非平衡转化为平衡,之后,无论游戏人II如何取子,游戏人I在取子后仍使得游戏达到平衡。
1804

被折叠的 条评论
为什么被折叠?



