题意:输入a, b表示两堆石头数目,威佐夫博弈,问:先手胜负?

a, b <= 1e100.

高精度。当a > b时, a = (a-b)*黄金分割比 时是先手败状态。因为a, b <= 1e100,所以黄金分割比至少要保留小数点后100位。

BigDecimal没有开方操作,所以二分算出黄金分割比。

 import java.util.*;
import java.io.BufferedInputStream;
import java.math.*;
public class Main {
public static void main(String[] args){
Scanner cin = new Scanner(new BufferedInputStream(System.in));
BigDecimal L = new BigDecimal(1.6180339887), R = new BigDecimal(1.6180339888);
BigDecimal eps = new BigDecimal(0.1).pow(101);
while( R.subtract(L).subtract(eps).compareTo(BigDecimal.ZERO) > 0){
BigDecimal M = L.add(R).divide(BigDecimal.valueOf(2));
BigDecimal ret = M.multiply(BigDecimal.valueOf(2)).subtract(BigDecimal.ONE).pow(2);
if(ret.compareTo(BigDecimal.valueOf(5)) > 0)
R = M;
else
L = M;
}
BigDecimal t = L;//黄金分割数精确到1e-100
while(cin.hasNext()){
BigInteger a = cin.nextBigInteger(), b = cin.nextBigInteger();
int com = a.compareTo(b), ccom = 0;
if(com == 0){
ccom = a.compareTo(BigInteger.ZERO);
if(ccom == 0)
System.out.println(0);
else
System.out.println(1);
continue ;
}
if(com == -1){
BigInteger c = a;
a = b;
b = c;
}
BigInteger k = a.subtract(b);
BigDecimal kk = new BigDecimal(k).multiply(t).setScale(0, BigDecimal.ROUND_DOWN);
k = kk.toBigInteger();
ccom = k.compareTo(b);
if(ccom == 0)
System.out.println(0);
else
System.out.println(1);
}
}
}

【hdu5973】高精度威佐夫博弈的更多相关文章

  1. HDU - 5973 Game of Taking Stones (威佐夫博弈 高精度)

    题目描述: Two people face two piles of stones and make a game. They take turns to take stones. As game r ...

  2. HDU 5973 Game of Taking Stones (威佐夫博弈+高精度)

    题意:给定两堆石子,每个人可以从任意一堆拿任意个,也可以从两堆中拿相同的数量,问谁赢. 析:直接运用威佐夫博弈,floor(abs(a, b) * (sqrt(5)+1)/2) == min(a, b ...

  3. HDU5973 Game of Geting Stone(威佐夫博弈)

    Two people face two piles of stones and make a game. They take turns to take stones. As game rules, ...

  4. 【HDOJ5973】Game of Taking Stones(Java,威佐夫博弈)

    思路:有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子. 游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子. 最后把石子全部取完 ...

  5. nim3取石子游戏 (威佐夫博弈)

    http://www.cnblogs.com/jackge/archive/2013/04/22/3034968.html 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有 ...

  6. HDU 5973 Game of Taking Stones 威佐夫博弈+大数

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5973 Game of Taking Stones Time Limit: 2000/1000 MS ...

  7. HD 2177(威佐夫博弈 入门)

    取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. HDU2177:取(2堆)石子游戏(威佐夫博弈)

    Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同 ...

  9. 【POJ1067】取石子游戏 (威佐夫博弈)

    [题目] Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的 ...

随机推荐

  1. wordpress 导航相关的函数

    上一篇文章.下一篇文章 previous_post_link( $format = '« %link', $link = '%title', $in_same_term = false, $exclu ...

  2. 为什么微信android图片质量会比iphone的差?

    为什么微信android图片质量会比iphone的差? 我们团队最初也纠结过这个问题,费了半天劲.绕了好大圈,直到最后才发现,原来这是谷歌犯得一个“小”错误,而且一直错到了今天. 谷歌的错就在于:li ...

  3. momentjs 求小时差异

    momentjs  使用 var now1 = moment( moment().unix()*1000); //获取unix时间戳 需要*1000 var befor_time = moment(1 ...

  4. Solr6.2.0 + zookeeper 集群配置

    zookeeper1 : 192.168.1.103zookeeper2 : 192.168.1.104zookeeper3 : 192.168.1.105solr1 : 192.168.1.106s ...

  5. 如何在C#中获得input文本框中的值

    前台 <input type="text" id="txt" name="txtn" style="width:213px& ...

  6. haproxy log config

    Step 4: Configuring logging Edit /etc/sysconfig/syslog SYSLOGD_OPTIONS=”-m 0 -r”   ————————————————— ...

  7. Information

    \\server01DESKTOP-RE5QEBU\pqpqlabs\\fileserverpansq@sh.pqlabs.comP1q2w3e

  8. JS倒计时——天时分秒

      HTML代码: <div id="times_wrap" class="time_num">    距离结束时间:     <div cl ...

  9. cookie导读,理解什么是cookie

    一.cookie导读,理解什么是cookie    1.什么是cookie:cookie是一种能够让网站服务器把少量数据(4kb左右)存储到客户端的硬盘或内存.并且读可以取出来的一种技术.    2. ...

  10. socket.io稳定性及事件测试

    socket.io测试报告 1.socekt.io能坚持多久 将服务器上的socekt.io代码从早上9:30分开始运行到晚上18点,每100毫秒发送一条数据,数据大概15个字符,同时开启5个连接 结 ...