HDU 5973-Game of Taking Stones(威佐夫博弈-JAVA BigDecimal)
Game of Taking Stones
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 459 Accepted Submission(s): 176
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 1
8 4
4 7
Sample Output
0
1
0
Source
威佐夫博弈的裸題,就是咳咳咳…資料量巨大,JAVA BigDecimal 可搞。
要精確到小數點後100位,精度要求太高了∑(っ °Д °;)っ
這個黃金分割數×(b-a)後如果等於a,那麼為0,否則為1。(預設a<b)
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Scanner;
public class Main
{
public static BigDecimal setScaleRoundDown(int newScale, BigDecimal b)
{
return b.setScale(newScale, BigDecimal.ROUND_DOWN);
}
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
BigDecimal a,b,tmp,yi,er,x,tp,l;
while(cin.hasNextBigDecimal())
{
a=cin.nextBigDecimal();
b=cin.nextBigDecimal();
l= new BigDecimal(String.valueOf("0"));
if(a.compareTo(l)==0)
{
if(b.compareTo(l)==0)
{
System.out.println("0");
continue;
}
}
if(a.compareTo(b)==0)
{
System.out.println("1");
continue;
}
if(a.compareTo(b)>0)
{
tp=a;
a=b;
b=tp;
}
x=b.subtract(a);
tmp = new BigDecimal(String.valueOf("1.61803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748475408807"));
tmp=tmp.multiply(x);
//System.out.println(tmp);
//tmp.setScale(0,BigDecimal.ROUND_DOWN);
//System.out.println(setScaleRoundDown(0, tmp));
if(setScaleRoundDown(0, tmp).compareTo((a))==0)
System.out.println("0");
else
{
System.out.println("1");
}
}
}
}
相關文章
- 博弈論入門之威佐夫博弈
- 巴什博奕和威佐夫博弈
- 【博弈論】HDU - 7216 Triangle GameGAM
- java中的BigDecimalJavaDecimal
- HDU 2973 YAPTCHA(威爾遜定理)APT
- (Java筆記)BigDecimal類Java筆記Decimal
- Java之BigDecimal詳解JavaDecimal
- Java BigDecimal使用指南JavaDecimal
- java.math.BigDecimal用法JavaDecimal
- HDU 1846-Brave Game(巴什博弈-SG函式)GAM函式
- 網路威脅攻守博弈縱橫二十年
- 【LeetCode】Jewels and StonesLeetCode
- Java的BigDecimal比較大小JavaDecimal
- Java 中比較 BigDecimal 的陷阱JavaDecimal
- HDU 1850-Being a Good Boy in Spring Festival(Nim博弈)GoSpring
- HDU 2897-邂逅明下(博弈-SG函式打表找規律)函式
- [java]java實現哈夫曼編碼Java
- HDU 1848 Fibonacci again and again (尼姆博弈+sg函式)AI函式
- 博弈學習(三) HDU 1538 A Puzzle for Pirates(經典的海盜分金推理)
- BigDecimalDecimal
- Java大數相乘(使用BigInteger和BigDecimal)JavaDecimal
- java保留2位小數及BigDecimal使用JavaDecimal
- java學習之BigInteger類、BigDecimal類JavaDecimal
- org.apache.jasper.JasperException: java.math.BigDecimalApacheExceptionJavaDecimal
- HDU 1847-Good Luck in CET-4 Everybody!(博弈-SG函式/找規律)Go函式
- Java之BigDecimal(存任意精度的浮點型)JavaDecimal
- HDU 1236 排名(Java)Java
- hdu1025javaJava
- hdu1069javaJava
- java基礎學習之十一:BigDecimal和BigIntegerJavaDecimal
- 商業計算Java高精度計算BigDecimal類JavaDecimal
- BigDecimal 詳解Decimal
- BigDecimal計算Decimal
- BigDecimal總結Decimal
- hdu2011javaJava
- hdu 2097 Java Sky數Java
- 博弈論
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal