有两堆各若干的物品,两人轮流从其中一堆取至少一件物品,至多不限,或从两堆中同时取相同件物品,规定最后取完者胜利。
直接说结论了,若两堆物品的初始值为(x,y),
且x< y ,则另z=y-x;
记w=(int) 5√−12∗z ;
若w=x,则先手必败,否则先手必胜。
本题是威佐夫博弈裸题
直接上代码:
code:
//威佐夫博弈
#include<cstdio>
#include<cmath>
int main()
{
int a,b,c;
while(scanf("%d%d",&a,&b)!=EOF)
{
if(a>b)
{
c=a;
a=b;
b=c;
}
c=b-a;
int w=(int )(((sqrt(5.0)+1.0)/2.0)*c);
if(w==a)
printf("0\n");
else
printf("1\n");
}
return 0;
}