2016年ACM/ICPC大連賽區 C題(JAVA高精度求sqrt(5)+威佐夫博弈)
阿新 • • 發佈:2018-11-11
題意:除了資料範圍為10^100次方以外就是威佐夫博弈。
關鍵還是sqrt(5)的精度。網上看到一種二分的求法。順便整理個板子。
程式碼:
import java.math.BigDecimal; import java.math.BigInteger; import java.util.Scanner; public class Mainn { public static void main(String[] args) { Scanner cin = new Scanner(System.in); BigDecimal two,three,five,a,b; two = BigDecimal.valueOf(2); three = BigDecimal.valueOf(3); five = BigDecimal.valueOf(5); BigDecimal l = two,r = three; for(int i=0;i<500;i++) { BigDecimal mid = l.add(r).divide(two); if(mid.multiply(mid).compareTo(five)<0) l = mid; else r = mid; } BigDecimal g = l.add(BigDecimal.ONE).divide(two); while(cin.hasNext()) { a = cin.nextBigDecimal(); b = cin.nextBigDecimal(); if(a.compareTo(b)<0) { BigDecimal tmp = a; a=b; b=tmp; } BigDecimal tmp = a.subtract(b); tmp = tmp.multiply(g); tmp = tmp.setScale(0,BigDecimal.ROUND_FLOOR); if(tmp.compareTo(b)==0) System.out.println("0"); else System.out.println("1"); } } }