zoj 3702 Gibonacci number

来源:互联网 发布:机柜网络模块接线图 编辑:程序博客网 时间:2024/05/01 18:10

题目链接:点击打开链接

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