noip2006的一道试题

来源:百度知道 编辑:UC知道 时间:2024/05/20 07:22:40
(取石子游戏) 现有5堆石子,石子数依次为3,5,7,19,50,甲乙两人轮流从任一堆中任取(每次只能取自一堆,不能不取), 取最后一颗石子的一方获胜。甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)?如果有,甲第一步应该在哪一堆里取多少?请写出你的结果:

答案我知道,但我不知道为什么,请牛人解答一下,谢

比较麻烦:
只有一堆时,无论有多少,先取者都可以一次性全部取走,所以必胜。

(1,1)时,显然先取者必败。
(1,2)时,先取者必胜,他可以在2那一堆中取1个,于是变成(1,1),但这成为上一种情况了,于是接下来取的人必败,亦即先取者必胜。
(1,3)时,先取者必胜。他可以在3那一堆中取2个,于是变成(1,1)。
(2,2)时,先取者必败。他在任何一堆中取1个,对方随即在另一堆中取1个,即变成(1,1);如果他取走一堆中的全部石子,对方即取走另一堆中的全部石子。
(2,3)时,先取者必胜。他可以在3那一堆中取1个,于是变成(2,2)。
(3,3)时,先取者必败。他取走任一堆中的1,2或3个,就变成了以上讨论过的情形。

(1,1,1)时,先取者必胜。他取走任一堆,就变成了(1,1)。
(1,1,2)时,先取者必胜。他取走2那一堆,就变成了(1,1)。
(1,1,3)时,先取者必胜。他取走3那一堆,就变成了(1,1)。
(1,2,2)时,先取者必胜。他取走1那一堆,就变成了(2,2)。
(1,2,3)时,先取者必败。分析如下:
他先取1那一堆,则变为(2,3),由上面的分析,对手必胜。
他从2那一堆中取1个,就变成了(1,1,3),对手可以将3那一堆全部取走,变成了(1,1),于是必胜。
他将2那一堆全部取走,就变成了(1,3),对手必胜。
他从3那一堆中取1个,就变成了(1,2,2),对手必胜。
他从3那一堆中取2个,就变成了(1,2,1),对手必胜。
他将3那一堆全部取走,就变成了(1,2),对手必胜。

这些胜负有什么规律呢?我们可以将每堆的数转换成二进制,然后看每一位上所有堆里的1的个数总和:
必胜情况:(n) (1,2)(1,3)(2,3) (1,1,1)(1,1,2)(1,2,2)
必败情况: (1,1)(2,2)(3,3) (1,2,3)

化为二进制:
必胜情况:
(n)<只有1堆>:……(反正每位只要有1肯定只