恩佐夫博弈+JAVA大数】的更多相关文章

题意:http://acm.hdu.edu.cn/showproblem.php?pid=5973 根号5复制后200位就行了,因为BigDecimal不支持开根号,除法二分开根. import java.io.FileInputStream; import java.io.PrintStream; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Scanner; import java.uti…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5973 Game of Taking Stones Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others) 问题描述 Two people face two piles of stones and make a game. They take turns to take stones. As ga…
思路:有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子. 游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子. 最后把石子全部取完者为胜者. 现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者. a,b<=1e100 思路:裸的威佐夫博弈,网上找了一个Java的高精度板子 主要是把黄金分割点用二分精确到小数点后100位 import java.math.BigDecimal; imp…
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 tak…
题意:输入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…
取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1730    Accepted Submission(s): 1049 Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相…
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8509    Accepted Submission(s): 4833 Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把…
取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9937    Accepted Submission(s): 5734 Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的…
http://acm.hdu.edu.cn/showproblem.php?pid=2177 取(2堆)石子游戏 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2484    Accepted Submission(s): 1500 Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏…
感谢 http://www.cnblogs.com/yuyixingkong/p/3362476.html 取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 2872    Accepted Submission(s): 1420 Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石…
题意:给定两堆石子,每个人可以从任意一堆拿任意个,也可以从两堆中拿相同的数量,问谁赢. 析:直接运用威佐夫博弈,floor(abs(a, b) * (sqrt(5)+1)/2) == min(a, b) 是必败态.用java的BigDecimal,是很好用的,要十分求Sqrt(5). 代码如下: import java.math.BigDecimal; import java.math.BigInteger; import java.util.Scanner; public class Main…
取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4657    Accepted Submission(s): 2465 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…
http://www.cnblogs.com/jackge/archive/2013/04/22/3034968.html 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者. 所谓威佐夫博弈,是ACM题中常见的组合游戏中的一种,大致上是这样的:有两堆石子…
java大数还是很好用的! 基本加入: import java.math.BigInteger; import jave.math.BigDecimal; 分别是大数和大浮点数. 首先读入可以用: Scanner input = new Scanner(System.in); BigInteger a = input.nextBigInteger(); 这样读还是很方便的 当然还有自己创建: BigInteger a = new BigInteger("1"); int b=1; Bi…
java大数是个好东西,用起来方便,代码短. 代码如下: import java.util.*; import java.math.*; public class Main { public static void main(String args[]) { Scanner cin = new Scanner(System.in); BigInteger a , b; while(cin.hasNext()) { a = cin.nextBigInteger(); b = cin.nextBig…
Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者.如果你胜,你第1次怎样取子?     Input 输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,…
java大数(2013长春网络赛)--hdu4762总结一下:1.java提交类要写Main.2.读取大数. Scanner read=new Scanner(System.in); BigInteger m: m=read.nextBigInteger(); 3.基本类型转化成大数. BigInteger q=BigInteger.valueOf(n); 4.大数最大公约数: BigInteger a=p.gcd(q); 5.finally函数只能写在try-catch后面 import ja…
[题目] Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同数量的石子.最后把石子全部取完者为胜者.现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者. Input 输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000. Output 输…
HDU5047Sawtooth(java大数) 题目链接 题目大意:在一个矩形内画n个"M".问如何画可以把这个矩形分成最多的区域. 给出这个区域的数目. 解题思路:最好的方式就是每条新画的"M"的线都和原来已经有的线相交,这样能够发现ai = ai - 1 + (i - 1) ∗ 4 ∗ 4 + 1.画一下就能够发现每次一条新的边和原有的边相交就会多出4个区域出来. 最后还会有一个小角区域多出来.最后公式:ai = a0 + 8 i i - 7 * i.a0 =…
JAVA大数类api http://man.ddvip.com/program/java_api_zh/java/math/BigInteger.html#method_summary 不仅仅只能查JAVA大数类的API.总结的东西都可以查询. 大数类基本语法 详细见这:http://www.babytree.com/user/showuser.php?uid=u60610804477&tab=journal&journalid=6811716&view=single  HDU47…
Cut the Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1102    Accepted Submission(s): 540 Problem Description MMM got a big big big cake, and invited all her M friends to eat the cake tog…
转:http://blog.csdn.net/sunkun2013/article/details/11822927 import java.util.*; import java.math.BigInteger; import java.util.Collections; import java.util.PriorityQueue; import java.util.Scanner; public class Switch { public static void main(String[]…
HDU 4911 Inversion 考点:归并排序 思路:这题呀比赛的时候忘了知道能够用归并排序算出逆序数,可是忘了归并排序的实质了.然后不会做-- 由于看到题上说是相邻的两个数才干交换的时候.感觉归并排序好像不是得要相邻的呀.然后就这样晕--刚才又一次看了才发现,归并就是相邻的交换的,正好是用来求逆序数的,唉--真的是做这个归并排序比赛就来了--真好! #include<iostream> #include<cstdio> #include<cstring> #in…
收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigInteger; public class BigNumber { // 默认除法运算精度,即保留小数点多少位 private static final int DEFAULT_DIV_SCALE = 10; // 这个类不能实例化 private BigNumber() { } /** * 提供精确的加法运算…
题目思路:威佐夫博弈: 当当前局面[a,b]为奇异局时直接输出0 否则: 1.若a==b,输出(0 0): 2.将a,b不停减一,看能否得到奇异局,若有则输出: 3.由于 ak=q*k(q为黄金分割数)具有单调性,不断改变k的值,看是否可以得到奇异局,若有则输出. 其他的话,要注意一些细节. #include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<…
威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 我们用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势.前几个奇异局势是:(0,0).(1,2).(3,5).(4,7).(6,10).(8,13).(9,15).(11,18).(12,20). 可以看出:a0=b0=0,ak是未在前…
基础威佐夫博弈,判断奇异局势即可,判断方式为k为两数之差绝对值,(sqrt(5) + 1) / 2 * k若等于两数小者则为奇异局势,也就是必败态. #include<stdio.h> #include<iostream> #include<cstring> #include<cmath> #include<queue> using namespace std; int main() { int a,b; while(~scanf("%…
java大数判断相等: 1.equals()方法2.compareTo()方法区别:2.00与2.0 equals()方法判断不等,compareTo()方法判断相等,科学的说法可以看java api文档可以通过equals()方法加striptrailingzeros()方法等效于compareTo()方法. import java.util.*; import java.math.*; public class Main { public static void main(String[]…
java大数做斐波那契数列:  思路:1.       2.可以用数组存着 import java.math.BigInteger; import java.util.Scanner; public class Main{ public static void main(String[] args) { Scanner cin=new Scanner(System.in); while(cin.hasNext()){//remermber BigInteger num1=cin.nextBigI…