传送门:: 点我 点我 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1185
1185 威佐夫游戏 V2 基准时间限制: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"); } } }