zoukankan      html  css  js  c++  java
  • 【HDOJ5973】Game of Taking Stones(Java,威佐夫博弈)

    思路:有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。

    游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。

    最后把石子全部取完者为胜者。

    现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。

    a,b<=1e100

    思路:裸的威佐夫博弈,网上找了一个Java的高精度板子

    主要是把黄金分割点用二分精确到小数点后100位

     1 import java.math.BigDecimal;
     2 import java.util.Scanner;
     3 public class Main
     4 {
     5     public static void main(String[] args)
     6     {
     7         BigDecimal two=BigDecimal.valueOf(2);
     8         BigDecimal five=BigDecimal.valueOf(5);
     9         BigDecimal eps= new BigDecimal("-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001");
    10         BigDecimal l=new BigDecimal("2.2360679774997");
    11         BigDecimal r=new BigDecimal("2.2360679774998");
    12         BigDecimal m=null;
    13         while(l.subtract(r).compareTo(eps)<0)
    14         {
    15             m=l.add(r).divide(two);
    16             if(m.multiply(m).subtract(five).abs().compareTo(eps.abs())<0) break;
    17             if(m.multiply(m).subtract(five).compareTo(eps)<0) l=m;
    18                else r=m;
    19         }
    20         BigDecimal Gold=m.add(BigDecimal.ONE).divide(two);
    21         Scanner sc=new Scanner(System.in);
    22         while(sc.hasNext())
    23         {
    24             BigDecimal a=sc.nextBigDecimal(),b=sc.nextBigDecimal();
    25             if(a.compareTo(b)>0)
    26             {
    27                 BigDecimal t=a;
    28                 a=b;
    29                 b=t;
    30             }
    31             BigDecimal c=b.subtract(a).setScale(0,BigDecimal.ROUND_FLOOR).multiply(Gold);
    32             c=c.setScale(0,BigDecimal.ROUND_FLOOR);
    33             if(a.equals(c)) System.out.println("0");
    34              else System.out.println("1");
    35         }
    36     }
    37 }
  • 相关阅读:
    IOS AutoLayout 代码实现约束—VFL
    理解iOS Event Handling
    一些优秀的iOS第三方库
    iOS中NSNotification、delegate、KVO三者之间的区别与联系?
    laravel 框架加载自定义函数/类文件
    Nodejs 使用 socket.io 简单实现实时通信
    Redis 与 Memcache 的异同之处
    Redis 服务安装
    PHP 依赖管理神器 Composer 基本使用
    Ajax无刷新图片插件使用
  • 原文地址:https://www.cnblogs.com/myx12345/p/9989680.html
Copyright © 2011-2022 走看看