题目大意:给你$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. java学习(三)类、实例

    类 public class Dog{ String breed; int age; String color; void barking(){ } void hungry(){ } void sle ...

  2. [C++]linux下实现rm()函数删除文件或目录

    转载请注明原创:http://www.cnblogs.com/StartoverX/p/4600866.html 在linux下有两个函数可以用来删除文件: #include <unistd.h ...

  3. centos7 上安装mysql5.7后登录报错ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: Yes 或者No)

    原文转载自以下链接:https://blog.csdn.net/keepd/article/details/77151006 安装完mysql后会有个临时密码去日志查看,但是查看登录修改密后还是不行 ...

  4. 通过iLO进行Zabbix监控——针对HP服务器集成

    iLO 全名是 Integrated Lights-out,它是惠普某些型号的服务器上集成的远程管理端口,它能够允许用户基于不同的操作系统从远端管理服务器,实现了虚拟存在和控制,从而进行智能型基础构架 ...

  5. Django_cookie+session

    一.cookie和session介绍 cookie 由服务器产生内容,浏览器收到请求后保存在本地:当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁 ...

  6. Scrum Meeting 11.05

    成员 今日任务 明日计划 用时 徐越 代码移植 学习ListView+simpleAdapter,actionBar.阅读并修改前端代码 4h 赵庶宏 服务器配置,代码移植  构建后端数据库,进行完善 ...

  7. Scrum Meeting 报告

    Scrum Meeting 报告 ----团队项目所需时间估计以及任务分配 由于能力有限,我们还不能构架好一个大框架.但是初步可以完成任务的流程和分配.任务所需要的具体实现可以参看<学霸系统的N ...

  8. second scrum meeting - 151026

    摘要:这一周的工作其实进行的并没有很迅速~不过我们团队的每个人都在慢慢进行自己的工作,并且我们也完成了大致的页面设计,开发了主页面的框架,并且我们也会开始着手学习服务器的操作,还有更加完善主页面的框架 ...

  9. 20172319 2018.03.27-04.05 《Java程序设计》第4周学习总结

    20172319 2018.03.27-04.05 <Java程序设计>第4周学习总结 教材学习内容总结 第四章 编写类 类与对象的回顾:对象是有状态的,状态由对象的属性值确定.属性由类中 ...

  10. 20172319 实验三 《敏捷开发与XP实践》 实验报告

    20172319 2018.05.17-30 实验三 <敏捷开发与XP实践> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1723班 学生姓名:唐才铭 学生学号:20 ...