zoj 3702 Gibonacci number

题目链接:点击打开链接

题目大意:在斐波那切数列的原始定义上多了,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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值