题目链接:点击打开链接
题目大意:在斐波那切数列的原始定义上多了,f[1]为不确定,求问给一个f【i】和i 求f【j】?
题目分析:初始想用打表的方式,结果没T却ML了= =,回头想想,这样一定是有规律的,所以分析如下
i: 0 1 2 3 4 5 6
f[i]: 1 1 2 3 5 8 13
G[i]: 1 x x+1 2*x+1 3*x+2 5*x+3 8*x+5
发现了吧,规律,a*x+b,而且a+b==f[i]
所以:( G[ j ]-f[ j ] )%f[ j-1 ]==0
题目总结:long long !! 注意数据范围
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#define maxn 1000000
using namespace std;
long long data[21];
void intit()
{
int i,j;
data[0]=data[1]=1;
for(i=2;i<=20;i++)
{
data[i]=data[i-1]+data[i-2];
}
}
int main()
{
int t,i,g,j,k;
long long ans,tmp;
scanf("%d",&t);
intit();
while(t--)
{
scanf("%d%d%d",&i,&g,&j);
tmp=g-data[i];
if( tmp<0||tmp%data[i-1]!=0 )
printf("-1\n");
else
{
ans =(long long)data[j]+tmp/data[i-1]*data[j-1];
printf("%lld\n",ans);
}
}
return 0;
}