2016 ICPC 大连 C Game of Taking Stones 【威佐夫博弈+大数+高精度】
来源:互联网 发布:数据报表分析 编辑:程序博客网 时间:2024/06/06 14:24
HDU 5973
Problem Description
Two people face two piles of stones and make a game. They take turns to take stones. As game rules, there are two different methods of taking stones: One scheme is that you can take any number of stones in any one pile while the alternative is to take the same amount of stones at the same time in two piles. In the end, the first person taking all the stones is winner.Now,giving the initial number of two stones, can you win this game if you are the first to take stones and both sides have taken the best strategy?
Input
Input contains multiple sets of test data.Each test data occupies one line,containing two non-negative integers a andb,representing the number of two stones.a and b are not more than 10^100.
Output
For each test data,output answer on one line.1 means you are the winner,otherwise output 0.
Sample Input
2 18 44 7
Sample Output
010
Source
2016ACM/ICPC亚洲区大连站-重现赛(感谢大连海事大学)
题意:全裸的威佐夫博弈,但是输入的两个数长度长达100位
思路:
威佐夫博弈:a为a、b中较小的数,先手是否会赢 -----> (sqrt(5)+1)/2*(b-a)==a? lose:win
而对于该题,数据范围是10的100次方,还有小数乘法 ----> 黄金分割率需要精确到小数点后100位 ----> 通过二分求解。
AC代码:
import java.math.BigInteger;import java.math.BigDecimal;import java.util.*;public class Main {public static void main(String[] args){Scanner scanner = new Scanner(System.in);BigDecimal TWO = BigDecimal.valueOf(2);BigDecimal FIVE = BigDecimal.valueOf(5);BigDecimal EPS = new BigDecimal("-0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001");BigDecimal L = new BigDecimal("2.2360679774997");BigDecimal R = new BigDecimal("2.2360679774998");BigDecimal mid = null;while(L.subtract(R).compareTo(EPS) < 0){mid = L.add(R).divide(TWO);if(mid.multiply(mid).subtract(FIVE).abs().compareTo(EPS.abs()) < 0)break;if(mid.multiply(mid).subtract(FIVE).compareTo(EPS) < 0)L = mid;elseR = mid;}BigDecimal GOLD = mid.add(BigDecimal.ONE).divide(TWO);//System.out.println(GOLD);while(scanner.hasNext()){BigDecimal a = scanner.nextBigDecimal();BigDecimal b = scanner.nextBigDecimal();if(a.compareTo(b) > 0) //保证a是小的{BigDecimal t = a;a = b;b = t;}BigDecimal c = b.subtract(a).multiply(GOLD);BigInteger aa = a.toBigInteger();BigInteger cc = c.toBigInteger();if(aa.equals(cc))System.out.println("0");else System.out.println("1");}}}
0 0
- 2016 ICPC 大连 C Game of Taking Stones 【威佐夫博弈+大数+高精度】
- Game of Taking Stones (hdu5973)——2016大连现场赛C题 威佐夫博弈
- HDU 5953 Game of Taking Stones(威佐夫博弈+高精度+二分)——The 2016 ACM-ICPC Asia Dalian Regional Contest
- Game of Taking Stones (大数 + 威佐夫博弈 java写的)
- HDU 5973 ICPC 大连 Game of Taking Stones
- HDU 5973 Game of Taking Stones 博弈+高精度
- HDU-5973 Game of Taking Stones(威佐夫博弈+高精度)(C++高精度)
- HDU5973 Game of Taking Stones (大数博弈)
- [hdu 5973 Game of Taking Stones] Wythoff Game+大数运算
- HDU-5973 Game of Taking Stones(大数+二分求精度)
- HDU 5973Game of Taking Stones 51nod 1185 威佐夫游戏 V2(威佐夫博弈)
- HDU 5973-Game of Taking Stones(威佐夫博弈-JAVA BigDecimal)
- HDOJ 5973 Game of Taking Stones
- HDU-5973-Game of Taking Stones(JAVA-BigDecimal+Wythoff博弈)
- Game of Taking Stones(威佐夫博奕 待整理)
- Codeforces 768E Game of Stones 博弈
- codeforces 768 E Game of Stones(博弈)
- codeforces 399 E. Game of Stones 博弈 思维题
- 第223讲:Spark Shuffle Pluggable框架ShuffleReader解析
- linux安装rz、sz上传下载文件工具
- qt5 使用oracle简单实例
- jsp页面使用EL表达式输出Java中的Date对象
- 移动应用开发Android通讯录导入小工具
- 2016 ICPC 大连 C Game of Taking Stones 【威佐夫博弈+大数+高精度】
- Python leetcode #2 Add Two Numbers
- python爬虫--selenium等待页面加载
- ubuntu下使用intellij运行CloudSimSDN的示例
- 441. Arranging Coins
- compileSdkVersion、targetSdkVersion、Support库的作用与他们之间的关系
- FormatMessage函数
- ASP.NET MVC 常用扩展点:过滤器、模型绑定等
- .msi 版本 和 .zip 版本的区别