威佐夫博弈,对于给定的两堆石子个数(a , b)a <= b ,如果现在的局势(a,b)为奇异局势,那么先手必输,否则先手必赢。判断奇异局势的公式: ak = k*(1+sqrt(5))/2 , bk = ak + k.先求出k,然后求出ak,判断是否相等即可。如果相等为奇异局势,否则非奇异局势。威佐夫博弈及其它博弈介绍
#include <iostream>
#include <cmath>
using namespace std ;
int main(){
int a ;
int b ;
while(cin>>a>>b){
if(a > b){
a ^= b ;
b ^= a ;
a ^= b ;
}
int k = b - a ;
if(floor(k * (1 + sqrt(5.0))/2) == a)
cout<<0<<endl ;
else cout<<1<<endl ;
}
return 0 ;
}