jzoj3461-小麦亩产一千八【斐波那契数列】

正题


大意

第零个格1个,第一格有p个,之后第i格就是第i-1格加i-2格。知道第a格有x个,求第b格有多少个。


解题思路

我们推一下

1 2 3 4 5 6 7 8
p p p+1 p + 1 2p+1 2 p + 1 3p+2 3 p + 2 5p+3 5 p + 3 8p+5 8 p + 5 13p+8 13 p + 8 21p+13 21 p + 13

不难发现 p p 的系数和右边的加数都是斐波那契数列。我们可以先预处理一下斐波那契数列然后求出 p p 之后就可以计算第b格了


代码

#include
#include
#define ll long long
using namespace std;
ll f[31],a,x,b,p;
int main()
{
    f[1]=1;f[2]=1;
    for (ll i=3;i<=30;i++)
      f[i]=f[i-1]+f[i-2];//预处理斐波那契数列
    while (scanf("%d%d%d",&a,&x,&b)!=EOF)//输入
    {
        x-=f[a-1];p=x/f[a];//计算p
        if (x%f[a]!=0) printf("-1\n");//判断无解
        else
        {
          if (b==1) printf("%lld\n",p);//特判
          else printf("%lld\n",p*f[b]+f[b-1]);//输出
        }
    }
}

你可能感兴趣的:(jzoj3461-小麦亩产一千八【斐波那契数列】)