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

题解:线性齐次递推:
$$
\left[
\begin{matrix}
f_1&f_2&\cdots&f_k
\end{matrix}
\right]
\left[
\begin{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}
\right]
=
\left[
\begin{matrix}
f_2&f_3&\cdots&f_{k+1}
\end{matrix}
\right]
$$
特征多项式$G_k(x)$为:
$$
\begin{align*}
G_k(x)&=|\lambda I-A|\\
&=\left|
\left[
\begin{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}
\right]\right|
\end{align*}
$$
可以对第一行展开
$$
\begin{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^2\log_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\n", ans);
return 0;
}

  

[AT697]フィボナッチ的更多相关文章

  1. [转帖]SPARC简介

    https://www.cnblogs.com/chaohm/p/5674886.html 1.    概述 SPARC(Scalable Processor ARChitecture,可扩展处理器架 ...

随机推荐

  1. C++设计模式(转)

    在简书看到CharlesW同学学习设计模式的笔记,感觉很有意思(单身狗的妄想),转载下. 转载:https://www.jianshu.com/p/082662126bdd 好的软件设计是多用代码复用 ...

  2. zabbix-agent报错:zabbix_agentd [5922]: cannot open log: cannot create semaphore set: [28] No space left on device

    起因: 新添加完自定义监控项后重启zabbix-agent时失败,查看/var/log/zabbix/zabbix-agentd.log 发现系统提示zabbix共享内存报错 zabbix_agent ...

  3. RobotFramework测试环境搭建记录

    Robotframwork测试环境搭建记录 1.安装Python2.7(https://www.python.org/) 在环境变量path中加入“C:\Python27” 安装后的验证方法为在命令行 ...

  4. JS模块化样例

    var fn_pageBtn = (function(){ var m1 = function(){ alert(1); }; var m2 = function(){ alert(2); }; re ...

  5. 吴恩达(Andrew Ng)——机器学习笔记1

    之前经学长推荐,开始在B站上看Andrew Ng的机器学习课程.其实已经看了1/3了吧,今天把学习笔记补上吧. 吴恩达老师的Machine learning课程共有113节(B站上的版本https:/ ...

  6. Ajax中post后台.net MVC中Controller的路径问题。

    今天使用ajax的post方法,去访问mvc的controller,url的传值是 "//ProductCatalog/PostShareInfo",发现无论如何都访问不到. 我实 ...

  7. Python20-Day03

    ##########文件操作相关########## 一.文件操作 文件就是操作系统提供给应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来. 文件操作的流程: * ...

  8. No.1001_第六次团队会议

    黯淡的一日 今天发生了很令人不爽的一件事,杜正远又被叫去实验室了.昨天界面就很难做,而且我们组人手稀缺,他的缺席让我很难做下去. 今天开会我自己没做出什么来,就加了一个群组的添加功能,同样,曾哲昊也没 ...

  9. DFS--障碍在指定时间会消失

    哈利被困在了一个魔法花园里.魔法花园是一个 N*M 的矩形,在其中有着许多植物, 这些植物会在时刻 K 的倍数消失. 哈利每单位时间都会选择上.下.左.右四 个方向的其中一个进行移动. #includ ...

  10. What is ASP.NET SignalR

    什么是ASP.NET SignalR ASP.NET SignalR是ASP.NET开发人员的新库,它使得为应用程序添加实时Web功能变得非常简单. 什么是“实时网络”功能?它能够让您的服务器端代码实 ...