分析:
看题解中都提到了这个东西:威佐夫博弈
知道了奇异局势的通项:
我们先算出
a
a
应该在第几项:
但是我们算出的n可能有1的误差
简单的判断一下前后几项奇异局势是否和符合即可
#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
const double x=sqrt(5.0)+1.0;
const double y=sqrt(5.0)+3.0;
int a,b;
//打印必败态
//void get()
//{
// int n=20;
// for (int i=0;i<=n;i++)
// for (int j=0;j<=n;j++)
// {
// int win=0,lose=0;
// for (int k=1;k<=min(i,j);k++)
// if (SG[i-k][j-k]) win++; else lose++;
// for (int k=0;k<i;k++)
// if (SG[k][j]) win++; else lose++;
// for (int k=0;k<j;k++)
// if (SG[i][k]) win++; else lose++;
// if (lose==0) //所有后继都是必胜态,当前是必败态
// printf("%d %d\n",i,j);
// else SG[i][j]=1;
// }
//}
int main()
{
while (scanf("%d%d",&a,&b)!=EOF)
{
if (a>b) swap(a,b);
int n=(int)(2.0*a/x);
int l,r,ff=1;
for (int i=n-1;i<=n+1;i++)
{
l=(int)(x*i/2.0); r=(int)(y*i/2.0);
if (l==a&&r==b) {ff=0; break;}
}
printf("%d\n",ff);
}
return 0;
}