雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2012-02-05 09:36  huhuuu  阅读(477)  评论(0编辑  收藏  举报

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;
}