威佐夫博弈 :是指的这样一个问题:有两堆各若干个物品,两个人轮流从任意一堆中取出至少一个或者同时从两堆中取出同样多的物品,规定每次至少取一个,至多不限,最后取光者胜利。
威佐夫博弈的证明可以去网上搜索。
如果出现奇异局势,那么先手必输。例如:(0,0),(1,2),(3,5),(4,7),(6,10)…… 这种局势就称为奇异局势 ,他们的差值是递增的,这些局势的第一个值是在前面未出现过的最小自然数,奇异局势的第一个值总是等于差值乘以1.618.
上题就是一道威佐夫博弈裸题
1.618 = (1+sqrt(5.0)/2;
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int a,b;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a>b)
swap(a,b);
int t;
double x=(1+sqrt(5.0))/2;
double c=(double)b-a;
t=(int)(x*c);
if(a==t)
printf("0\n");
else
printf("1\n");
}
return 0;
}