zoukankan      html  css  js  c++  java
  • ZOJ 3702 Gibonacci number(数学推导)

      公式推导题,G(0) = 1,G(1) = t,给出一个 i 和 G(i),要求求出G(j)的值;

      G(0) = 0*t + 1
      G(1) = 1*t + 0; 观察t的系数和常数值可以知道二者都遵循斐波那契的规律,设系数值为Y(n),常数值为X(n);
      G(2) = 1*t + 1; Y(0) = 0,Y(1) = 1;
      G(3) = 2*t + 1; X(0) = 1, X(1) = 0;
      G(4) = 3*t + 2; 这样就能求出答案了,最后的t满足要求就有解
      G(5) = 5*t + 3;

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    using namespace std;
    long long x[10000],y[10000];
    void init()
    {
        x[0]=1,x[1]=0;
        y[0]=0,y[1]=1;
        for(int i=2; i<=80; i++)
        {
            x[i]=x[i-1]+x[i-2];
            y[i]=y[i-1]+y[i-2];
        }
    }
    int main()
    {
        int T;
        init();
        scanf("%d",&T);
        int i,gi,j;
        while(T--)
        {
            scanf("%d%d%d",&i,&gi,&j);
            long long t;
            t=(gi-x[i])/y[i];
            if((gi-x[i])%y[i]!=0||t<1)
                printf("-1
    ");
            else
                printf("%lld
    ",x[j]+t*y[j]);
        }
        return 0;
    }
  • 相关阅读:
    Hibernate知识回顾
    Lucene搜索过程的核心类
    JSP知识回顾
    Java Swing 知识回顾
    Spring知识回顾
    javaDocking 学习
    Lucene搜索范围
    MINA 学习
    java 阿拉伯人民币转换为中文
    oracle提高查询效率方法
  • 原文地址:https://www.cnblogs.com/jifahu/p/5490774.html
Copyright © 2011-2022 走看看