HDU-5973-Game of Taking Stones(JAVA-BigDecimal+Wythoff博弈)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=5973



Wythoff博弈套公式b=(b-a)*(1+sqrt(5))/2,,,,a==b?0:1
由于BigDecimal无法开根号,所以手动二分精确根5的小数位。




//package zzz;
import java.util.Scanner;
import java.math.*;
import java.text.*;
public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner cin=new Scanner(System.in);
		//BigInteger c,d,a,b=BigInteger.valueOf(32);
		 BigDecimal a,b,c,d,xx;
		 BigDecimal one = new BigDecimal(1);
		 BigDecimal two = new BigDecimal(2);
		 BigDecimal three = new BigDecimal(3);
		 BigDecimal five = new BigDecimal(5);
		 BigDecimal l=new BigDecimal(2),r=new BigDecimal(3);
		 for(int i=0; i<1000; ++i)
		 {
			 BigDecimal mid=r.add(l).divide(two);
			 if(mid.multiply(mid).compareTo(five)<0)
			 {
				 l=mid;
			 }
			 else r=mid;
		 }
		// System.out.println(l);
		 BigDecimal glo=one.add(l).divide(two);//黄金分割
		while(cin.hasNext())
		{
			//a=cin.nextBigInteger();
			//b=cin.nextBigInteger();
			
			a=cin.nextBigDecimal();
			b=cin.nextBigDecimal();
		
			
			if(a.compareTo(b)>0)
			{
				c=a;
				a=b;
				b=c;
			}
			b=b.subtract(a).multiply(glo);
		//	System.out.println(glo);
			//System.out.println(a);
			//System.out.println(b);
			if(b.compareTo(a)>0 && b.subtract(a).compareTo(one)<0)System.out.println("0");
			else System.out.println("1");
		}
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值