HDU 5973 博弈

来源:互联网 发布:伺服电机plc编程 编辑:程序博客网 时间:2024/09/21 06:34

题意:这个就是威佐夫博弈

难点:数据有点大 所以可以用java 做保留黄金分割 小数点后100位以上 可以用二分求

链接:点击打开链接

代码:

import java.util.*;import java.math.*;public class Main{    public static void main(String args[ ]){       Scanner in=new Scanner(System.in);       BigDecimal one=new BigDecimal(1);       BigDecimal two=new BigDecimal(2);       BigDecimal thr=new BigDecimal(3);       BigDecimal five=new BigDecimal(5);       BigDecimal eps=new BigDecimal(0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001);       ;       BigDecimal l=two,r=thr;       while(r.subtract(l).compareTo(eps)>0){       BigDecimal mid=l.add(r.subtract(l).divide(two));       if(mid.multiply(mid).compareTo(five)>0){       r=mid;       }       else l=mid;          }       BigDecimal gold=l.add(one).divide(two);      // System.out.println(gold);       while(in.hasNext()){       BigDecimal a=in.nextBigDecimal();       BigDecimal b=in.nextBigDecimal();       if(a.compareTo(b)>0){       BigDecimal c=a;       a=b;       b=c;       }     //  System.out.println(a);      // System.out.println(b);       a=a.setScale(0,BigDecimal.ROUND_DOWN);       b=b.subtract(a).multiply(gold).setScale(0, BigDecimal.ROUND_DOWN);       b=b.setScale(0,BigDecimal.ROUND_DOWN);       //b.setScale(0, BigDecimal.ROUND_DOWN);    //   System.out.println(a);     //  System.out.println(b);       if(a.compareTo(b)==0)       System.out.println(0);       else       System.out.println(1);       }           }}