zoukankan      html  css  js  c++  java
  • 博弈

    http://acm.hdu.edu.cn/showproblem.php?pid=2516

     1 斐波那契博弈
     2 判断这个数是不是斐波那契额数就可以,如果是,则后手必赢,如果不是可以分解成多个斐波那契数,则先手必赢
     3 
     4 
     5 import java.util.Scanner;
     6 
     7 public class Main{
     8     public static void main(String[] args) {
     9         Scanner cin = new Scanner(System.in);
    10         long[]f = new long[50];
    11         f[0] = 1;
    12         f[1] = 1;
    13         for(int i = 2;i<50;i++)
    14             f[i] = f[i-1]+f[i-2];
    15         int a;
    16         while(true){
    17             a = cin.nextInt();
    18             if(a==0)
    19                 break;
    20             boolean flag = false;
    21             for(int i = 0;i<50;i++)
    22                 if(a==f[i]){
    23                     flag = true;
    24                     break;
    25                 }
    26             if(flag)
    27                 System.out.println("Second win");
    28             else 
    29                 System.out.println("First win");
    30         }
    31     }
    32 }
     1 /***
     2  * Wythoff博弈入门
     3  * 这个博弈关键是在与判断,m,n是不是奇异局势
     4  * 如果是奇异局势的话,那么先手必赢
     5  * 所谓奇异局势也就是说当j = m*(sqrt(5)-1)/2
     6  * 且 a == j*(sqrt(5)+1)/2
     7  * 如果m == a&&n ==a+j的话,这是一个奇异局势
     8  * 或则当a = (j+1)*(sqrt(5)+1)/2时
     9  *  m==a&&n==a+j+1时,也是奇异局势
    10  */
    11 import java.util.Scanner;
    12 
    13 public class Main {
    14     public static void main(String[] args) {
    15         Scanner cin = new Scanner(System.in);
    16         int m, n;
    17         double eps1 = (Math.sqrt(5) - 1) / 2;
    18         double eps2 = (Math.sqrt(5) + 1) / 2;
    19         while (cin.hasNext()) {
    20             m = cin.nextInt();
    21             n = cin.nextInt();
    22             if (m > n) {
    23                 int c = m;
    24                 m = n;
    25                 n = c;
    26             }
    27             int j = (int) (m * eps1);
    28             int a = (int)(eps2 * j);
    29             int b = (int)(eps2 * (j+1));
    30             boolean flag = false;
    31             if (m == a && n == a + j)
    32                 flag = true;
    33             if (m == b && n == b + j + 1)
    34                 flag = true;
    35             if (flag)
    36                 System.out.println("0");
    37             else
    38                 System.out.println("1");
    39         }
    40     }
    41 }
  • 相关阅读:
    LOJ DFS序
    牛客练习赛31 D神器大师泰兹瑞与威穆
    Codeforces Round #487 (Div. 2) C
    Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C D
    [Windows Server 2003] 还原SQL Server数据库
    [Windows Server 2008] 查看PHP详细错误信息
    [Windows Server 2008] 安装网站伪静态
    网站Gzip压缩
    [Windows Server 2008] SQL Server 2008 数据库还原方法
    [Windows Server 2008] 安装Apache+PHP+MySQL
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/6985412.html
Copyright © 2011-2022 走看看