• [AT697]フィボナッチ


    题目大意:给你$n,k(nleqslant10^9,kleqslant10^3)$,求$f_n$。$f$数组满足$f_1=f_2=cdots=f_k=1$,$f_n=sumlimits_{i=n-k}^{n-1}f_i$

    题解:线性齐次递推:
    $$
    left[
    egin{matrix}
    f_1&f_2&cdots&f_k
    end{matrix}
    ight]
    left[
    egin{matrix}
    0&0&0&cdots&0&1\
    1&0&0&cdots&0&1\
    0&1&0&cdots&0&1\
    0&0&1&cdots&0&1\
    vdots&vdots&ddots&ddots&vdots&vdots\
    0&0&0&cdots&1&1
    end{matrix}
    ight]
    =
    left[
    egin{matrix}
    f_2&f_3&cdots&f_{k+1}
    end{matrix}
    ight]
    $$
    特征多项式$G_k(x)$为:
    $$
    egin{align*}
    G_k(x)&=|lambda I-A|\
    &=left|
    left[
    egin{matrix}
    lambda&0&0&cdots&0&-1\
    -1&lambda&0&cdots&0&-1\
    0&-1&lambda&cdots&0&-1\
    0&0&-1&cdots&0&-1\
    vdots&vdots&ddots&ddots&vdots&vdots\
    0&0&0&cdots&-1&lambda-1
    end{matrix}
    ight] ight|
    end{align*}
    $$
    可以对第一行展开
    $$
    egin{align*}
    G_k(x)&=(-1)^{1+1}lambda G_{k-1}(x)+(-1)(-1)^{k-1}(-1)^{k+1}\
    &=lambda G_{k-1}(x)-1\
    &=lambda^k-lambda^{k-1}-lambda^{k-2}-cdots-1
    end{align*}
    $$
    发现模数是$10^9+7$,但是$k$只有$10^3$,所以直接$O(k^2)$卷积和取模,总复杂度$O(k^2log_2n)$

    卡点:

    C++ Code:

    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #define maxn 2010
    const int mod = 1e9 + 7;
    
    #define mul(x, y) static_cast<long long> (x) * (y) % mod
    inline void reduce(int &x) { x += x >> 31 & mod; }
    
    int n, K;
    int f[maxn], g[maxn];
    
    void PW(int n) {
    	if (n == 0) { f[0] = 1; return ; }
    	PW(n >> 1);
    	std::memset(g, 0, K << 3);
    	for (int i = 0; i < K; ++i)
    		for (int j = 0; j < K; ++j)
    			reduce(g[i + j + (n & 1)] += mul(f[i], f[j]) - mod);
    	for (int i = K + K - 1 + (n & 1); i >= K; --i) {
    		for (int j = 1; j <= K; ++j) reduce(g[i - j] += g[i] - mod);
    	}
    	std::memcpy(f, g, K << 2);
    }
    
    int main() {
    	scanf("%d%d", &K, &n);
    	PW(n - 1);
    	int ans = 0;
    	for (int i = 0; i < K; ++i) reduce(ans += f[i] - mod);
    	printf("%d
    ", ans);
    	return 0;
    }
    

      

  • 相关阅读:
    学习笔记25—python基本运算法则
    学习笔记24—win10环境下python版libsvm的安装
    学习笔记23—window10 64位 python2.7 安装liblinear
    学习笔记22—PS小技巧
    学习笔记21—PS换图片背景
    学习笔记20—MATLAB特殊函数
    学习笔记19—dpabi错误集
    学习笔记18—circos应用集
    system
    Python string
  • 原文地址:https://www.cnblogs.com/Memory-of-winter/p/10398167.html
Copyright © 2020-2023  润新知