POJ 1067 取石子游戏

威佐夫博奕(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同
时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

/*黄金分割比例判断是不是非奇异局势,面对奇异局势必败
两个人如果都采用正确操作,那么面对非奇异局势,先拿者必胜
反之,则后拿者取胜。
*/
//公式 ak =[k(1+√5)/2],bk= ak + k

/*Accepted    184K    0MS    C++    334B    2012-08-23 16:55:14*/

#include<stdio.h>

#include<math.h>



const double key = (sqrt(5.0) + 1.0) / 2;

int main()

{

    int a, b, k;

    while(scanf("%d%d", &a, &b) == 2)

    {

        if(a > b)

        {

            a ^= b, b ^= a, a ^= b;

        }

        k = b - a;

        puts((floor(k * key) == a) ? "0" : "1");

    }

    return 0;

}

你可能感兴趣的:(poj)