威佐夫博弈(Wythoff's game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。
可以看出,a0=b0=0,ak是未在前面出现过的最小自然数,而 bk= ak + k。
以上均为百度百科中的资料。
模板题 : HDU 1527 取石子游戏
//HDU 1527 取石子游戏
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int m, n;
while(cin >> m >> n)
{
int a = min(n, m);
int b = max(n, m);
double k = (double)b - a;
int term = (int)(k * (1 + sqrt(5)) / 2);
if(term == a)
printf("0\n");
else
printf("1\n");
}
return 0;
}