来源
https://vjudge.net/contest/402133#problem/C
思路
由威佐夫博弈的结论可知特异局势为,但数据很大,需要上高精度。
要注意的是double的sqrt精度不够,而BigDecimal中没有实现开方。
因此需要手动实现大数开方,可以选用牛顿迭代法或暴力模拟趋近,下文实现中选用的后者。
代码
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
private static BigDecimal sqrt(BigDecimal x, int n) {
BigDecimal ans = BigDecimal.ZERO;
BigDecimal eps = BigDecimal.ONE;
for (int i = 0; i < n; ++i) {
while (ans.pow(2).compareTo(x) < 0) {
ans = ans.add(eps);
}
ans = ans.subtract(eps);
eps = eps.divide(BigDecimal.TEN);
}
return ans;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
BigDecimal k = new BigDecimal(5);
k = sqrt(k,120).add(BigDecimal.ONE).divide(BigDecimal.valueOf(2));
// System.out.println(k);
while (input.hasNext()) {
BigDecimal a= input.nextBigDecimal();
BigDecimal b= input.nextBigDecimal();
if (a.compareTo(b)>0){
BigDecimal t=a;
a=b;
b=t;
}
// System.out.println(a.toString()+b.toString());
if (b.subtract(a).multiply(k).setScale(0, BigDecimal.ROUND_DOWN).compareTo(a)==0){
System.out.println(0);
}
else{
System.out.println(1);
}
}
}
}