这题就是模板(威佐夫博弈)。
两堆石子,两种取法:一是取一堆里面的任意多的石子;二是在两对里面取任意多的相同数量的石子。
这是典型的威佐夫博弈。
先给一个double变量x赋值恒定的值(1+√5)/2(注意数据类型的转换)。
a,b两堆石子:
让a小于b(交换),然后(b-a)乘以神奇的x(数据类型转换成整形)后与较小的数a比较。
同样利用结论:如果相等则先选者处于P(必败态)状态;否则处于N状态(必胜态)。
#include<bits/stdc++.h>
using namespace std;
const double x = (1.0+sqrt(5.0))/2.0;
int Wgame(int a, int b){
if(a>b){
swap(a, b);
}
if(a==(int)((b-a)*x)) return 0;
else return 1;
}
int main()
{
int n,m;
while(cin>>n>>m){
cout<<Wgame(n, m)<<endl;
}
}