ZOJ 3702 Gibonacci number

来源:互联网 发布:当兵对网络教育学籍 编辑:程序博客网 时间:2024/05/22 16:52

从标题就可以看出来跟Fibonacci数列有关,其实就是一个Fibonacci数列有关,只是是在系数和常数上.

G(0)=1,G(1)=t

给出i,G(i),j,求G(j)

很容易推出

G(i)=F(i)*t+F(i-1)  F表示Fibonacci数列

所以首先要把t求出来

注意要用long long 不然会WA

#include <iostream>#include <cstdio>using namespace std;long long f[22];int i,gi,j;void init(){f[0]=0,f[1]=1;for(int i=2;i<=20;++i){f[i]=f[i-1]+f[i-2];}}int main(){init();int t;scanf("%d",&t);while (t--){scanf("%d%d%d",&i,&gi,&j);if((gi-f[i-1])%f[i]==0&&(gi-f[i-1])/f[i]>=1){long long  t=(gi-f[i-1])/f[i];printf("%lld\n",f[j]*t+f[j-1]);}else{printf("-1\n");}}return 0;}


原创粉丝点击