[poj1067]取石子游戏

首先有SG(x,y)=mex(SG(x-a,y-a),SG(x-a,y),SG(x,y-a)),其中SG(0,0)=0,打表发现(1,2)(3,5)(4,7)(6,10)(8,13)……时SG0(即必败),假设第一项是ai,第二项是bi,很容易发现:1.bi=ai+i2.ai=mex(bi,bj,0)

通过暴力可以求出$\sum\limits_{i=10001}^{20000}ai/i/10000=1.61800$,而这个数也就是黄金分割比,因此可以得出$ai=(1+\sqrt{5})/2\cdot i$,据此判断a和$((1+\sqrt{5})/2)\cdot (b-a))$是否相等即可。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cmath>
 4 using namespace std;
 5 int a,b;
 6 int main(){
 7    while (scanf("%d%d",&a,&b)!=EOF){
 8       if (a>b)swap(a,b);
 9       printf("%d\n",(floor((b-a)*(1+sqrt(5.0))/2)!=a));
10    }
11 }
View Code

 

posted @ 2019-07-28 10:28  PYWBKTDA  阅读(115)  评论(0编辑  收藏  举报