对着题解都写不对,我没救了啊!!!
查看原帖
对着题解都写不对,我没救了啊!!!
1127424
damuzhi楼主2024/4/3 19:32
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair <LL, LL> pr;

LL n;
map <LL, LL> m;
map <LL, LL> :: iterator it;
long long mod = 1000000007;

long long fib(long long n)
{
    long long res,res1,res2;
    long long ret;
    if(n < 3)
    {
        return 1;
    }
    it = m.find(n);
    if(it == m.end())
    {
        if(n % 2)
        {
            res = (n - 1) / 2;//n
            ret = (fib(res + 1) * fib(res + 1)) + (fib(res) * fib(res)) % mod;
        }
        else
        {
            res = n / 2;
            ret = (fib(res-1) * 2 + fib(res)) * fib(res) % mod;
        }
    
        m.insert(pr(n, ret)); //插入
        return ret;
    }
    else
    {
        return it -> second;//直接返回pair的第二项(值)
    }
}
/*
F[2n] = F[n+1]² - F[n-1]² = (2F[n-1] + F[n]) · F[n] ①

F[2n+1] = F[n+1]² + F[n]² ②
*/

int main() 
{
    long long n;
    cin >> n;
    long long ans = fib(n);
    cout << ans << endl;
    return 0;
}
/*
F[2n] = F[n+1]² - F[n-1]² = (2F[n-1] + F[n]) · F[n] ①

F[2n+1] = F[n+1]² + F[n]² ②
*/
2024/4/3 19:32
加载中...