博客讲解链接:威佐夫博弈
而 bk= ak + k。然后公式化就得到了奇异局势的状态公式:
ak = [ k * (1 + √5) / 2 ] , ([x]表示对x取整,也就是 (int)x )
bk = ak + k
性质1:每个自然数都包含在且只包含在一个奇异局势中。
性质2:对任意的奇异局势,任何合法的操作都会使其成为非奇异局势,也就是奇异局势的所有后继状态均为非奇异局势。
性质3:任何非奇异局势都可以通过某种合法操作得到奇异局势,即奇异局势的所有后继状态中存在奇异局势。
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int n, m;
while(scanf("%d%d",&n,&m)!=EOF)
{
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("Lao Wang\n");
else
printf("Xiao Ren\n");
}
return 0;
}