51NOD 1185 威佐夫游戏 V2(大数运算 JAVA 模板)


 传送门::  点我 点我   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");

			
		}

	}
}


posted @ 2017-05-04 11:35  Sizaif  阅读(232)  评论(0编辑  收藏  举报