HDU5973(威佐夫博弈+Java大数)

今天做题长知识了,除了巴什博奕,尼姆博奕,竟然还有威佐夫博弈
威佐夫博弈定义:
有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者胜利。
直接说结论了,若两堆物品的初始值为(x,y),且x

import java.math.BigDecimal;
import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        BigDecimal one=new BigDecimal(1);  
        BigDecimal two=new BigDecimal(2);  
        BigDecimal three=new BigDecimal(3);
        BigDecimal five=new BigDecimal(5);
        BigDecimal l=one;
        BigDecimal 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 gold=l.add(BigDecimal.ONE).divide(two);

        BigDecimal a,b;
        Scanner cin=new Scanner(System.in);
        while(cin.hasNext())
        {
            a=cin.nextBigDecimal();
            b=cin.nextBigDecimal();
            if(b.compareTo(a)<0)
            {
                BigDecimal temp=a;
                a=b;
                b=temp;
            }
            a=a.setScale(0,BigDecimal.ROUND_DOWN);
            b=b.subtract(a).multiply(gold);
            b=b.setScale(0,BigDecimal.ROUND_DOWN);
            if(b.compareTo(a)==0)
            {
                System.out.println("0");
            }
            else 
            {
                System.out.println("1");
            }
        }

        cin.close();
    }

}

你可能感兴趣的:(HDU)