2016年ACM/ICPC大连赛区 C题(JAVA高精度求sqrt(5)+威佐夫博弈)

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5747

题意:除了数据范围为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");
		}
	}
}

猜你喜欢

转载自blog.csdn.net/LSD20164388/article/details/82933226