WHU 1540 Fibonacci 递推
武大邀请赛的网络预选赛,就去做了个签到题,居然连这个递推都没推出来,真是惭愧。
而且好久没写矩阵乘法了,来回顾一下。
题意:
求Fibonacci数列的,前n项立方和。
思路:
可以求得一下递推公式:
然后用矩阵快速幂求出结果即可。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <functional> using namespace std; typedef long long ll; const ll MOD = (ll)1e9+;
const ll ONE[][] = {
{, , , , },
{, , , , },
{, , , , },
{, , , , },
{, , , , },
};
const ll MU[][] = {
{, , , , },
{, , , , },
{, , , , },
{, , , , },
{, , , , },
};
const ll v1[] = {, , , , };
struct Matrix {
ll body[][]; Matrix() {}
Matrix(bool x) {
if (x) {
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
body[i][j] = ONE[i][j];
} else {
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
body[i][j] = MU[i][j];
}
} Matrix operator * (const Matrix &x) {
Matrix res;
ll tmp = ;
for (int i = ; i < ; i++)
for (int j = ; j < ; j++) {
tmp = ;
for (int k = ; k < ; k++)
tmp = (tmp+(body[i][k]*x.body[k][j])%MOD)%MOD;
res.body[i][j] = tmp;
}
return res;
}
}; Matrix pow(int k){
Matrix res(true);
Matrix d(false);
while (k>) {
if (k&) res = res*d;
d = d*d;
k >>= ;
}
return res;
} int n;
ll v2[]; int main() {
#ifdef Phantom01
freopen("WHU1540.txt", "r", stdin);
#endif // Phantom01 while (scanf("%d", &n)!=EOF) {
if (==n) break; if (n<=) {
printf("%d\n", n);
continue;
}
Matrix tmp = pow(n-);
ll t = ;
for (int i = ; i < ; i++) {
t = ;
for (int j = ; j < ; j++)
t = (t+(tmp.body[i][j]*v1[j])%MOD)%MOD;
v2[i] = t;
}
printf("%d\n", (int)v2[]);
} return ;
}
WHU 1540 Fibonacci 递推的更多相关文章
- SPOJ:Fibonacci Polynomial(矩阵递推&前缀和)
Problem description. The Fibonacci numbers defined as f(n) = f(n-1) + f(n-2) where f0 = 0 and f1 = 1 ...
- Codeforces1065G Fibonacci Suffix 【递推】【二分答案】
题目分析: 首先为了简便起见我们把前$15$的答案找出来,免得我们还要特判$200$以内之类的麻烦事. 然后我们从$16$开始递推.考虑猜测第i位是$0$还是$1$(这本质上是个二分).一开始先猜是$ ...
- POJ3070 Fibonacci(矩阵快速幂加速递推)【模板题】
题目链接:传送门 题目大意: 求斐波那契数列第n项F(n). (F(0) = 0, F(1) = 1, 0 ≤ n ≤ 109) 思路: 用矩阵乘法加速递推. 算法竞赛进阶指南的模板: #includ ...
- Codeforces Gym101205D:Fibonacci Words(KMP+递推)
Gym 101205D 题意:f[0] = "0", f[1] = "1",接下来f[i] = f[i-1] + f[i-2],相当于字符串拼接.然后给出一个n ...
- 牛客多校第九场 A The power of Fibonacci 杜教bm解线性递推
题意:计算斐波那契数列前n项和的m次方模1e9 题解: $F[i] – F[i-1] – F[i-2] = 0$ $F[i]^2 – 2 F[i-1]^2 – 2 F[i-2]^2 + F[i-3] ...
- 斐波那契数列 递归 尾递归 递推 C++实现
==================================声明================================== 本文原创,转载请注明作者和出处,并保证文章的完整性(包括本 ...
- hihoCoder 1143 : 骨牌覆盖问题·一(递推,矩阵快速幂)
[题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个2xN的长条形 ...
- hdu 1723 DP/递推
题意:有一队人(人数 ≥ 1),开头一个人要将消息传到末尾一个人那里,规定每次最多可以向后传n个人,问共有多少种传达方式. 这道题我刚拿到手没有想过 DP ,我觉得这样传消息其实很像 Fibonacc ...
- 51nod1149 Pi的递推式
基准时间限制:1 秒 空间限制:131072 KB 分值: 640 F(x) = 1 (0 <= x < 4) F(x) = F(x - 1) + F(x - pi) (4 <= x ...
随机推荐
- bioinformaitcs的latex版本参考文献填坑
最近实验室投bioinfomatics的刊,编辑说要把参考文献的格式改成不带方括号的,而且加点,而且只保留前三作者,之后用et al. 折腾了一下午,终于弄出来了. 首先,导言区需要添加: \make ...
- 数据库用varchar存储时间时会出现时间差解决办法
用varchar存储时间,最后提取数据库时间字段会出现时间差问题. 当我们调用数据库时间字段时,会出现时间差,使得查询的数据查询不到,解决办法如下 CAST( 字段名as DATE) between ...
- 监控RMAN操作进度的脚本
REM ------------------------------- REM Script to monitor rman backup/restore operations REM To run ...
- php 扩展 suhosin 配置不当引发的报错及其解决方法
1. /var/log/messages 频繁报错: Jul :: localhost suhosin[]: ALERT - script tried to increase memory_limit ...
- vue反向代理解决跨域
问题描述 在项目开发的时候,接口联调的时候一般都是同域名下,且不存在跨域的情况下进行接口联调,但是当我们现在使用vue-cli进行项目打包的时候,我们在本地启动服务器后,比如本地开发服务下是 http ...
- 关于JavaScript中this的指向,你知晓几分?请速来围观!
---恢复内容开始--- 一.this是什么东东? this是指包含它的函数作为方法被调用时所属的对象.这句话理解起来跟卵一样看不懂,但是如果你把它拆分开来变成这三句话后就好理解一点了. 1.包含它的 ...
- tinymce原装插件源码分析(一)-hr
tinymce简介 tinymce是一款能方便无限扩展的网页富文本编辑器. tinymce原装插件已经十分丰富,对于文本编辑(blog等文章)是绰绰有余,但是应对一些复杂的应用,比如在上面开发html ...
- vue列表数据倒计时存在的一些坑
vue 列表数据倒计时,在页面销毁前需要清除定时器,否着会报错. export default { data() { return { list: [] } }, mounted() { for (l ...
- POJ-2420 A Star not a Tree? 梯度下降 | 模拟退火
题目链接:https://cn.vjudge.net/problem/POJ-2420 题意 给出n个点,找一个点,使得这个点到其余所有点距离之和最小. 思路 一开始就在抖机灵考虑梯度下降,猜测是个凸 ...
- NYIST 1019 G.亲戚来了
G.亲戚来了 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 Bob 一家人要去下馆子,为什么呢?因为他姑姑的大爷的叔叔的孙子的表叔的婶婶的儿子来了,亲戚来了当然要下 ...