请达人们做一道题吧!感激不尽

来源:百度知道 编辑:UC知道 时间:2024/07/07 23:12:42
Description
有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。

Input
输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。

Output
输出对应也有若干行,每行包含一个数字1或0,如果最后你是胜者,则为1,反之,则为0。

Sample Input

2 1
8 4
4 7

Sample Output

0
1
0

我这里正好有一个别人写的
只有一堆时,无论有多少,先取者都可以一次性全部取走,所以必胜。

(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堆>:……(反正每