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

来源:互联网 发布:新南开淘宝城 编辑:程序博客网 时间:2024/06/14 03:52

今天做题长知识了,除了巴什博奕,尼姆博奕,竟然还有威佐夫博弈
威佐夫博弈定义:
有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者胜利。
直接说结论了,若两堆物品的初始值为(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();    }}
0 0
原创粉丝点击