正题
大意
第零个格1个,第一格有p个,之后第i格就是第i-1格加i-2格。知道第a格有x个,求第b格有多少个。
解题思路
我们推一下
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|
pp | 2p+12p+1 | 3p+23p+2 | 5p+35p+3 | 8p+58p+5 | 13p+813p+8 | 21p+1321p+13 |
不难发现pp的系数和右边的加数都是斐波那契数列。我们可以先预处理一下斐波那契数列然后求出之后就可以计算第b格了
代码
#include<cstdio>
#include<iostream>
#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];//计算pif (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]);//输出}}
}