• POJ 1067 取石子游戏 [博弈]


    题意:威佐夫博弈。

    思路:看了很多证明都没看懂。最后决定就记住结论好了。

    对于所有的奇异局面(必败局),有通项公式

    Pi = (a, b), (a = i * [(sqrt(5) + 1) / 2], b = a + i) 其中[]表示取整,如[3.9] = 3, [4.1] = 4。

    那个(sqrt(5) + 1) / 2就是传说中的黄金分割了。

    根据这个通项公式,可以发现a与b之间的关系,a = (b - a) * [(sqrt(5) + 1) / 2]。

    因此对于一个给定的局面(a, b),只要判断其是否有这个关系就知道是不是必败了。此外还要注意,如果a > b,应将两者的值互换一下,这是为了方便直接套用上面的公式。

     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<math.h>
     4 using namespace std;
     5 int main()
     6 {
     7     int a, b;
     8     double tem = (sqrt(5.0) + 1.0) * 0.5;
     9     while (~scanf("%d%d", &a, &b))
    10     {
    11         if (a > b) swap(a, b);
    12         int x = b - a;
    13         if ((int)(x * tem) == a) printf("0
    ");
    14         else printf("1
    ");
    15     }
    16     return 0;
    17 }
  • 相关阅读:
    Trap 冷启动与热启动告警
    SNMP支持IPv6
    跨函数使用内存
    动态内存分配
    结构体
    指针和数组
    组合模式
    类方法实用点语法调用
    数据结构与算法定义
    RAC初步使用
  • 原文地址:https://www.cnblogs.com/fenshen371/p/3287881.html
Copyright © 2020-2023  润新知