2 1 8 4 4 7
0 10
给两堆石子,两个人轮流拿,可以从其中的一堆拿任意多数量,也可以从两堆中拿相同的数量,拿到最后一颗为胜利者
l这是一个威佐夫博弈的裸题,对于a,b(a<b)若有floor((b-a)*((sqrt(5)+1)/2))==a则是必败,但由于是大数,所以用java就比较简单了,但是这面sqrt(5)不能直接算,所以用二分查找,找到近似值l(sqrt(5)+1)/2是黄金分割数
import java.math.BigDecimal; import java.util.Scanner; public class Main{ public static void main(String args[]){ Scanner sc=new Scanner(System.in); BigDecimal two=new BigDecimal(2); BigDecimal three= new BigDecimal(3); BigDecimal five=new BigDecimal(5); BigDecimal l=two,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; while(sc.hasNext()){ a=sc.nextBigDecimal(); b=sc.nextBigDecimal(); if(a.compareTo(b)>0){ BigDecimal tmp=a; a=b;b=tmp; } b=b.subtract(a).multiply(gold); b=b.setScale(0,BigDecimal.ROUND_DOWN); if(a.compareTo(b)==0) System.out.println("0"); else System.out.println("1"); } } }