传送门:: 点我 点我 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1185
基准时间限制:1 秒 空间限制:131072 KB 分值: 0
难度:基础题
有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 <= 10^18)
Output
共T行,如果A获胜输出A,如果B获胜输出B。
Input示例
3 3 5 3 4 1 9
Output示例
B A A
大数模板, 威佐夫博弈 黄金分割点 JAVA 模板 要注意 精度问题 精度 精度!!!!!
不然 只能过 text10 再往后就WA了
提交时 去掉package 并把class 名 改成main
package Big;
import java.util.Scanner;
import java.math.*;
public class Action {
public static void main(String args[]) {
Scanner cin = new Scanner(System.in);
BigInteger b, c;
boolean t;
int T=cin.nextInt();
while(T !=0)
{
T--;
BigInteger a = BigInteger.valueOf(0); //初始化
//a = cin.nextBigInteger(); //键盘输出
//b = cin.nextBigInteger();
//c = a.subtract(b); //大数减法
/*c = a.add(b); //大数的加法
c = a.multiply(b); //大数乘法
c = a.divide(b); //大数除法(取整数部分)
c = a.remainder(b); //大数求模
t = a.equals(b); //大数求相不相等
c = a.gcd(b); //大数求公约数
c = a.pow(2); //大数的指数乘法(指数只能为整数)
c = a.abs(); //大数取绝对值
c = a.negate(); //大数取反
*/
BigDecimal d, e, f, g,h;
double q;
//d = cin.nextBigDecimal();
//e = cin.nextBigDecimal();
//f = d.add(e);
//f = d.subtract(e);//-
//f = d.multiply(e);//
//f = d.divideToIntegralValue(e); //大数除法取整数部分
//g = f.multiply(e); //大数整数部分*除数
//f = d.subtract(g); //然后求解余数
//f = d.remainder(e);
//f = d.pow(3);
//q = d.compareTo(e);
//f = d.ulp(); //末位数据的精度
// System.out.println(f);
BigDecimal temp = new BigDecimal("1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911374");
//long ans=temp.multiply(BigDecimal(d-e)).longValue();
long qq = cin.nextLong();
long ww = cin.nextLong();
if(qq>ww)
{
qq^=ww;
ww^=qq;
qq^=ww;
}
long ans = temp.multiply(new BigDecimal(ww - qq)).longValue();
//System.out.println(c);
//System.out.println(ans);
//System.out.println(qq);
if(ans==qq)
System.out.println("B");
else
System.out.println("A");
}
}
}