(转)Nim游戏的一个扩展的证明(Moore’s Nimk and Mis`ere)

Moore’s Nimk

Nim游戏的简单扩展,不过证明我还是想了一些时间的。

n堆石子,每次从不超过k堆中取任意多个石子,最后不能取的人算失败。
把n堆石子的石子数用二进制表示,统计每一二进制位上的1的个数,若每一位上1的个数mod (k + 1)全为0,则必败。否则必胜
证明:
1.显然终止局面全为0满足命题,为必败态

2.对于某个局面,若存在某些二进制位上的1的个数mod (k + 1)不为0,则一定存在一个合法的移动,使得每一个二进制位上的1的个数mod(k + 1)等于0。设1的个数mod(k + 1)不为0的最高二进制位上有m个1,则把这些1都变成0,记此时改变的堆数为m,若遇到下一个1的个数mod(k + 1)不为0的二进制位上有r个1,设原来改变的m堆在这一二进制位上有a个1和b个0。若a >= r,则把其中r个1->0;若b >= k + 1 - r,则把其中k + 1 - r个0->1;否则,有a < r且b < k + 1 - r,选择原来改变的m堆以外的r - a堆,这r-a堆在该位上是1,此时改变的堆数为a + b + r - a = b + r < k + 1 - r + r = k + 1,故为合法的移动。重复上述操作,必然能使得每一位上的1的个数mod (k + 1)都为0。

3.对于某个局面,若每一个二进制位上的1的个数mod (k + 1)都为0,则一定不存在某个合法的移动,使得移动后每一二进制位上的1的个数mod (k + 1)都为0。因为最多对k堆石子做改变,所以不可能在某一位改变k + 1个1或0,使得mod(k + 1)仍为0,必然需要做偶数个0->1和偶数个1->0,对于1->0的这堆,必然存在高位,从1->0,要使高位的操作成立,又需要某一堆在这一位上0->1,依次类推,最后在最高位上存在一堆是0->1,这是不合法的。
证毕。

练习:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2161

Mis`ere Moore’s Nimk

其他的条件一样,只是谁拿走最后一个谁输。

我们的目标是:使得最后剩余的石子规模都是1,且堆数mod (m + 1) = 1
开始时按照Moore’s Nimk的策略操作,直到只剩下大于1且小于等于m堆规模大于1的石子时,可取得我们的目标状态。
正确性证明:按照Moore’s Nimk的策略,必胜方取后每一个二进制位mod (m + 1) = 0,所以不可能只剩下m堆规模大于1的石子,而对手也不可能把m + 1堆规模大于1的石子一下都拿走,所以最后一定会剩下小于等于m堆规模大于1的石子让必胜方拿。
先手必胜:
1.石子规模都为1,且堆数mod (m + 1) != 1
2.石子规模不全为1,且当堆数以2进制表示时,存在某一二进制位上1的和mod(m + 1) != 0

posted @ 2013-06-01 20:07  AC_Von  阅读(859)  评论(0编辑  收藏  举报