随笔 - 54  文章 - 0  评论 - 184  阅读 - 58万

Fibonacci sequence

1133. Fibonacci Sequence

Time Limit: 1.0 second
Memory Limit: 16 MB
Problem illustration
is an infinite sequence of integers that satisfies to Fibonacci conditionFi + 2 = Fi + 1 + Fi for any integer i. Write a program, which calculates the value of Fn for the given values of Fi and Fj.

Input

The input contains five integers in the following order: iFijFjn.
−1000 ≤ ijn ≤ 1000, i ≠ j,
−2·109 ≤ Fk ≤ 2·109 (k = min(ijn), …, max(ijn)).

Output

The output consists of a single integer, which is the value of Fn.
 
 
这题目最开始想到的解法是用搜索,由输入的Fi,Fj,求出与Fi相邻的另一个数Fj+1,再往后继续求,加上动态规划的话,复杂度也不算高。。。
但。。。就在准备动手搞的时候,意外发生了。我忽然觉得,或许可以数学方式来递推一下,于是,拿过纸笔在黄纸上算啊算啊。。。
一直没搞出来,算了,还是笨方法吧。
现在的做法就是直接搜索:
 
F(n) = F(n-1)+F(n-2)
现在输入是Fi,Fj,假设i < j.
现在我需要找到F(i+1).
 
很显然,对于任意的k > i.
 
Fk = xFi + yF(i+1).
 
只要求出x,y,问题就解决了。
 
要求出x,y,我只要求F(k-1),F(k-2)的x,y.
 
对了,这个需要做高精度的处理,x,y可能会很大很大。。。
 
 
复制代码
    static BigInt sx,sy;
    static BigInt sx2,sy2;
    static bool found[N];
    static BigInt value[N][2];
    static const int HALF = 1000;

    static void GetXY(int i,int k,BigInt& x,BigInt& y)
    {
        if(k == i)
        {
            y = 0;
            x = 1;
            return ;
        }

        if(k == i+1)
        {
            x = 0;
            y = 1;
            return ;
        }

        int index =  n + HALFT;

        if(found[index])
        {
            x  = value[index][0];
            y  = value[index][1];
            return;
        }


        GetNext(i,k-1,sx,sy);

        GetNext(i,k-2,sx2,sy2);

        x  = sx+sx2;
        y  = sy+sy2;

        value[index][0] = x;
        value[index][1] = y;
        found[index] = true;
        return;
    }


int GetNextValue(int i,int fi,int j,int fj)
{
   BigInt x,y;
   GetXY(i,j,x,y);
   return (fj - fi*x)/y;
}

 

 
复制代码

 

 
 
 
posted on   twoon  阅读(518)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
< 2013年1月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示