有2堆石子。A B两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比赛。
例如:2堆石子分别为3颗和5颗。那么不论A怎样拿,B都有对应的方法拿到最后1颗。
Input
第1行:一个数T,表示后面用作输入测试的数的数量。(1 <= T <= 10000) 第2 - T + 1行:每行2个数分别是2堆石子的数量,中间用空格分隔。(1 <= N <= 2000000)
Output
共T行,如果A获胜输出A,如果B获胜输出B。
Sample Input
3
3 5
3 4
1 9
Sample Output
B
A
A
存在很多A必输的局面,(0,0) (1,2) (3,5) (4,7) (6,10) (8,13) (9,15) (11,18)
会发现他们的差值是递增的,为 0 , 1 , 2, 3, 4 , 5 , 6, 7…n,而用数学方法分析发现局面中第一个值为前面局面中没有出现过的第一个值,比如第三个局面,前面出现了 0 1 2,那么第三个局面的第一个值为 3 ,比如第五个局面,前面出现了 0 1 2 3 4 5 ,那么第五个局面第一个值为6。此处参考了Yoangh大佬的博客
再找规律的话我们会发现,第一个值 = 差值 * 1.618 而1.618 = (sqrt(5)+ 1) / 2
当a=b时,两堆同时取a
当a=ak,b>bk时,从第2堆取b-bk个
当a=ak,b<bk时,从第2堆取a-a(b-a)个
当a>ak,b=bk(ak+k)时,从第1堆取a-ak个
当a<ak,b=bk(ak+k)时,从第2堆中拿走若干变成奇异局势
07-05
617