摘要: 题意:n枚硬币围成一个圈,每次每个人可以从中取走一枚或者相邻的两枚(如果两枚硬币原本中间隔着一枚硬币,后来被取走,这两枚硬币不算相邻)。谁取走最后一枚硬币谁就赢了。思路:我们可以找找规律。首先,n为1和2的时候肯定是先手胜。n为3时,无论先手取1枚还是2枚,都会输。当n大于等于4时,我们分成两种情况来讨论。如果n为偶数,对于后手来说,总可以根据先手的做法,在对称的位置取走相同数量的硬币。先手必输。如果n为奇数,对于后手来说,总可以在某处取走硬币后,使得剩下的硬币分成对称的两组,然后依照n为偶数时的策略就能赢。此时也是先手必输。下面举个例子,假设n为5时,后手的策略如下图:PS:终于明白为什么这 阅读全文
posted @ 2013-08-28 21:36 fenshen371 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 题意:威佐夫博弈。思路:看了很多证明都没看懂。最后决定就记住结论好了。对于所有的奇异局面(必败局),有通项公式Pi = (a, b), (a = i * [(sqrt(5) + 1) / 2], b = a + i) 其中[]表示取整,如[3.9] = 3, [4.1] = 4。那个(sqrt(5) + 1) / 2就是传说中的黄金分割了。根据这个通项公式,可以发现a与b之间的关系,a = (b - a) * [(sqrt(5) + 1) / 2]。因此对于一个给定的局面(a, b),只要判断其是否有这个关系就知道是不是必败了。此外还要注意,如果a > b,应将两者的值互换一下,这是为了 阅读全文
posted @ 2013-08-28 20:09 fenshen371 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 题意:两个人做游戏,每个人都可以在自己的回合里将数p乘以2到9之间的一个数,初始时p=1,谁先将p乘到大于等于n就算赢。思路:一开始我算sg值,结果算来算去都没算明白。。。后来看了别人题解,才豁然开朗。首先,对于一个数m,计算出p在什么范围内可以乘到大于等于m。该范围即为[ceil(m/9), m - 1]。其中ceil()为向上取整。如果将每一个数字都看作一个局面的话,则在该区间内的点即为N点。对于一个数m,计算出p在什么范围内只能乘到大于等于m。该范围即为[ceil(m/2), m - 1]。如果将每一个数字都看作一个局面的话,且m对应的局面为N点时,则在该区间内的点即为P点。考虑到int 阅读全文
posted @ 2013-08-28 15:38 fenshen371 阅读(180) 评论(0) 推荐(0) 编辑