#Z01567. acm/博弈/小尼教你捡石子

acm/博弈/小尼教你捡石子

题目描述

小尼和他的朋友还在玩捡石子游戏,规则如下:有n堆石子,每堆数量大于0,游戏开始由两个人轮流取石子,规定一次必须取一堆中大于零的任意数量石子。 最后把石子全部取完者为胜者。假设小尼先取,且双方都采取最好的策略(智商MAX!!),问最后小尼能否获胜。

输入格式

输入有多组,每组包含一个整数n表示有n堆,然后给出n堆石子的数量,每堆石子间用空格隔开。(n<50)

输出格式

对于每组输入,如果小尼获胜输出1,否则输出0。

3 3 5 1
1 1
1
1

提示

这里假定是 3 堆。 其实现在这个问题的一部分解决了——任意多堆的相同个数的 石头堆。而且很容易知道,(0,N,N)一定是必败态,如果有仔细尝试的话,可以发现(1,2,3)也是必败态,那到底有什么规律呢?

命题:(a,b,c) 是必败态等价于 p(a, b, c) = a xor b xor c = 0 ( xor 是异或运算)

如果我们面对的是一个非奇异局势 (a,b,c),要如何变为奇异局势呢?假设 a

推广到多个堆也是类似的办法。