4.J

题目连接:http://acm.hust.edu.cn/vjudge/contest/125308#problem/J

题目大意 游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。用到了威佐夫博奕。(a[k],b[k]) 满足a[k]=b[k]+k 称为奇异局势。 那么我们要如何判断一个局势是否为奇异局势?公式如下:

a[k] = [k(1+√5)/2](a[k]这个方括号为下标运算符,[k(1+√5)/2]这个方括号为取整运算符),b[k] = a[k] + k 。
博弈问题的博客连接  http://blog.csdn.net/luomingjun12315/article/details/45479073
//模板
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{

    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
        int k=abs(a-b);
        a=a<b?a:b;
        int ak;
        ak=floor(k*(1.0+sqrt(5.0))/2);//公式算出啊a[k]与给出的a[k]比较
        printf("%d
",ak!=a);//如果不相等,就不是奇异局势
    }

    return 0;
}
原文地址:https://www.cnblogs.com/Twsc/p/5738257.html