zoukankan      html  css  js  c++  java
  • 威佐夫博弈

    题目类型 :

      有两堆物品数量若干,两人轮流从某一堆或同时从两堆中选取同样多的物品,规定每次最小选一个,多者不限,最后一次取尽者获胜。

    分析 :

      相比于巴什博弈,此种博弈得情形更加复杂些,我们用(X , Y)表示当前得局势,如果甲面对(0 , 0)说明甲输掉了比赛,我们称这种状态是奇异局势,前几个奇异局势是 (0 , 0) , (1 , 2) , (3 , 5) , (4 , 7) , (6 , 10) , (8 , 13) , (9 , 15) , (11 , 18)

      可以看出,x是未在前面出现过得最小自然数,并且经过任何操作,都可以将奇异局势变成非奇异局势

      现在,如果给你一个局势(x, y),如何判断他是不是奇异局势

      

      x  = k * (1 + sqrt(5) )/2 ; y = x + k

      对于一个当前的局势如果 (y - x) * ((1 + sqrt(5) )/2 ) = x

    代码示例 :

      

    double pp = 1.0*(1.0+sqrt(5.0))/2.0;
    
    int main() { 
        int x, y;
        
        while(~scanf("%d%d", &x, &y)){
            if (x > y) swap(x, y);
            
            int k = y - x;
            if (x == (int)(1.0*k*pp)) printf("0
    ");
            else puts("1");
        }
        return 0;
    }
    
    东北日出西边雨 道是无情却有情
  • 相关阅读:
    linux 文件时间
    linux命令学习 touch
    linux命令学习 cp
    Linux命令学习 mv
    SpringMVC mvc详解
    JDBC原生态代码
    java中静态方法中调用非静态方法的详解
    Spring技术详解
    Spring中的 BeanFactory和 ApplicationContext的区别与解释
    java多线程编程相关技术
  • 原文地址:https://www.cnblogs.com/ccut-ry/p/8996129.html
Copyright © 2011-2022 走看看