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);
       }
       
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值