取石头的博弈——BZOJ 2275: [Coci2010]HRPA

N个石子,A和B轮流取,A先。每个人每次最少取一个,最多不超过上一个人的个数的2倍。
取到最后一个石子的人胜出,如果A要有必胜策略,第一次他至少要取多少个。

找规律发现是一个Fibnaci数列,变下型就AC了

View Code
#include<stdio.h>

long long a[1009];

int main()
{
long long n,i;
while(scanf("%lld",&n)!=EOF)
{
a[0]=0;a[1]=1;
if(n==1){
printf("1\n");continue;
}

for(i=2;1;i++)
{
a[i]=a[i-1]+a[i-2];
if(a[i]>=n)
break;
}

if(a[i]==n)
printf("%lld\n",n);
else
{
long long j,temp=n;
for(j=i;j>=1&&temp!=0;j--)
{
if(temp>=a[j])
temp-=a[j];
}
printf("%lld\n",a[j+1]);
}
}

return 0;
}



原文地址:https://www.cnblogs.com/huhuuu/p/2338762.html