卡精度,用java大数过
威佐夫博弈:
有2堆石子。A B两个人轮流拿,A先拿。每次可以从一堆中取任意个或从2堆中取相同数量的石子,但不可不取。拿到最后1颗石子的人获胜。假设A B都非常聪明,拿石子的过程中不会出现失误。给出2堆石子的数量,问最后谁能赢得比赛。
当两堆石子的个数差值为两数中最小值乘上1.618等于另一个数时,后手赢
import java.util.*;
import java.math.*;
public class Main {
public static void main(String arg[])
{
Scanner cin = new Scanner(System.in);
int t= cin.nextInt();
BigDecimal x,k;
BigInteger n,m,p;
x = new BigDecimal("1.61803398874989484820458");
for(int i = 0 ; i < t ; i ++)
{
n = cin.nextBigInteger();
m = cin.nextBigInteger();
if(n.compareTo(m)>0)
{
p = n ;
n = m;
m = p;
}
k = BigDecimal.valueOf(m.longValue()-n.longValue());
if(n.compareTo((k.multiply(x).toBigInteger())) == 0)
System.out.println("B");
else System.out.println("A");
}
}
}