题意:
单纯的威佐夫博弈,不过数据范围增加到10^100,所以要用Java大数,所以当数一大,黄金分割数(1+√5)/2.0的精度就很重要了,而黄金分割数的精度又在于√5的精度,所以需要用到二分法求√5到一定精度。
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String args[]){
String s = "0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001";
BigDecimal eps = new BigDecimal(s);
BigDecimal F = BigDecimal.valueOf(5);
BigDecimal l = BigDecimal.valueOf(2), r = BigDecimal.valueOf(3), mid;
while(l.multiply(l).subtract(F).abs().compareTo(eps) > 0){
mid = l.add(r).divide(BigDecimal.valueOf(2));
if(mid.multiply(mid).compareTo(F) < 0) l = mid;
else r = mid;
}
BigDecimal key = l.add(BigDecimal.ONE).divide(BigDecimal.valueOf(2.0));
Scanner in = new Scanner(System.in);
while(in.hasNext()){
BigDecimal x, y;
x = in.nextBigDecimal();
y = in.nextBigDecimal();
if(x.compareTo(y) > 0){
BigDecimal t = x;
x = y;
y = t;
}
String s1 = y.subtract(x).multiply(key).toString();
for(int i = 0; i < s1.length(); ++i)
if(s1.charAt(i) == '.'){
s1 = s1.substring(0, i);
break;
}
BigInteger bt1 = new BigInteger(s1);
BigInteger bt2 = x.toBigInteger();
if(bt1.compareTo(bt2) == 0) System.out.println(0);
else System.out.println(1);
}
}
}
继续加油~