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 ...
随机推荐
- NodeJS学习笔记 (4)网络服务-http(ok)
原文:https://github.com/chyingp/nodejs-learning-guide 自己敲代码: http模块概览 大多数nodejs开发者都是冲着开发web server的目的选 ...
- Spring 与CXF整合(spring3.2,cxf3.1.11)
1,jar包导入,从官网下载zip文件后里面会有很多jar包,哪些必须哪些不是必须,我能力有限,从其他人那参考了导入的一下jar包. 2.配置相关文件 web.xml中配置servlet <se ...
- [agc015c]nuske vs phantom thnook
题意: 有一个n*m的网格图,每个格子是蓝色或白色.四相邻的两个格子连一条边,保证蓝格子构成一个森林. 有q组询问,每次询问给出一个矩形,问矩形内蓝格子组成的联通块个数. $1\leq n,m\leq ...
- [arc082e]ConvexScore
题意: 给出直角坐标系中的$N$个点$(X_i,Y_i)$,定义由其中部分点构成的点集为“凸点集”当且仅当这些点恰好能构成一个凸多边形(内部没有其他点). 如图,点集$\{A,C,E\}$和$\{B, ...
- BZOJ2870 最长道路tree(并查集+LCA)
题意 (n<=50000) 题解 #include<iostream> #include<cstring> #include<cstdio> #include ...
- [洛谷P1892][codevs2597]团伙
题目大意:有n个强盗,他们有这样的关系:1.朋友的朋友是朋友:2.敌人的敌人是朋友. 两个人是朋友,则他们在一个团伙中,是敌人则在不同团伙中. 现在给出一些朋友或敌人的关系,问最多有多少团伙.输入保证 ...
- git 源码安装后报错/usr/bin/git: No such file or directory
现象 今天源码安装一个git后,执行git命令后报如下错误: $ git --version -bash: /usr/bin/git: No such file or directory 分析过程 开 ...
- Vue组件使用基础
这篇博文用来记录 .vue 组件的使用方法. 可以把组件代码按照 template.style.script 的拆分方式,放置到对应的 .vue 文件中. 模板(template).初始数据(data ...
- WPF 内存释放
原文:WPF 内存释放 在WPF 项目中引用到Transitionals 实现图片转场特效,发现每次图片转场内存都会增加,在每次转场后进行内存压缩 记录 解决方案如下: GC.Collect(); G ...
- HTTP——学习笔记(2)
HTTP协议通信双方一定是客户端和服务器端,而且一定是由客户端发出请求,由服务器接受请求 客户端发送的报文的构成: 服务器端收到请求后响应的报文构成: 客户端向服务器端发送请求有多种方法: get:获 ...