poj1067 取石子游戏
Posted liguanlin1124
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了poj1067 取石子游戏相关的知识,希望对你有一定的参考价值。
题解:
数据范围这么大当然先打表了。
然后发现$P-position$分布极为稀疏。
不妨设$x<y$,则$P-position$为:$(0,0)$,$(1,2)$,$(3,5)$,$(4,7)$……
有两个规律:
1.所有正整数出现且仅出现一次。
2.第$k$个点的$y-x=k$。
所以有$Beatty$定理得:
1/a+1/b=1
a=b-1
得出一组解然后带通项就行了。
代码:
#include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const double sq = sqrt(5); const double K = (sq-1.0)/2.0; const double D = (sq+1.0)/2.0; const double G = (sq+3.0)/2.0; int a,b,k; int main() { while(scanf("%d%d",&a,&b)>0) { int ans = 1;if(a>b)swap(a,b); for(int k = a*K-1;ans&&k<=(a+1)*K+1;k++) if(a==(int)(k*D)&&b==(int)(k*G))ans=0; printf("%d ",ans); } return 0; }
以上是关于poj1067 取石子游戏的主要内容,如果未能解决你的问题,请参考以下文章