HDU 5973 博弈

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

难点:数据有点大 所以可以用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);
       }
       
    }
}


你可能感兴趣的:(博弈)