POJ3070 Fibonacci(矩阵快速幂加速递推)【模板题】
题目链接:传送门
题目大意:
求斐波那契数列第n项F(n)。
(F(0) = 0, F(1) = 1, 0 ≤ n ≤ 109)
思路:
用矩阵乘法加速递推。
算法竞赛进阶指南的模板:
#include <iostream>
#include <cstring> using namespace std;
const int MOD = ; void mul(int f[], int base[][]) {
int c[];
memset(c, , sizeof c);
for (int j = ; j < ; j++) {
for (int k = ; k < ; k++) {
c[j] = (c[j] + 1LL * f[k] * base[k][j]) % MOD;
}
}
memcpy(f, c, sizeof c);
}
void mulself(int base[][]) {
int c[][];
memset(c, , sizeof c);
for (int i = ; i < ; i++)
for (int j = ; j < ; j++)
for (int k = ; k < ; k++)
c[i][j] = (c[i][j] + 1LL*base[i][k]*base[k][j]) % MOD;
memcpy(a, c, sizeof c);
} int main()
{
int n;
while (cin >> n && n != -) {
int f[] = {, };
int base[][] = {{, }, {, }};
for (; n; n >>= ) {
if (n & ) mul(f, base);
mulself(base);
}
cout << f[] << endl;
}
return ;
}
蒟蒻的模板:
#include <cstdio>
#include <iostream>
#include <cstring> using namespace std;
typedef long long ll;
const int MOD = 1e4;
const int MAXN = ;
struct Matrix{
int mat[MAXN][MAXN];
Matrix operator * (Matrix const& b) const {
Matrix res;
memset(res.mat, , sizeof res.mat);
for (int i = ; i < MAXN; i++)
for (int j = ; j < MAXN; j++)
for (int k = ; k < MAXN; k++)
res.mat[i][j] = (res.mat[i][j] + this->mat[i][k] * b.mat[k][j])%MOD;
return res;
}
}base, F0, FN;
Matrix fpow(Matrix base, ll n) {
Matrix res;
memset(res.mat, , sizeof res.mat);
for (int i = ; i < MAXN; i++)
res.mat[i][i] = ;
while (n) {
if (n&) res = res*base;
base = base * base;
n >>= ;
}
return res;
}
void init()
{
base.mat[][] = ; base.mat[][] = ;
base.mat[][] = ; base.mat[][] = ;
memset(F0.mat, , sizeof F0.mat);
F0.mat[][] = ; F0.mat[][] = ;
} int main()
{
int N;
while (cin >> N) {
if (N == -)
break;
init();
FN = fpow(base, N);
cout << FN.mat[][] << endl;
}
return ;
}
POJ3070 Fibonacci(矩阵快速幂加速递推)【模板题】的更多相关文章
- HDU 5950 - Recursive sequence - [矩阵快速幂加速递推][2016ACM/ICPC亚洲区沈阳站 Problem C]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 Farmer John likes to play mathematics games with ...
- CH 3401 - 石头游戏 - [矩阵快速幂加速递推]
题目链接:传送门 描述石头游戏在一个 $n$ 行 $m$ 列 ($1 \le n,m \le 8$) 的网格上进行,每个格子对应一种操作序列,操作序列至多有 $10$ 种,分别用 $0 \sim 9$ ...
- HDU 1757 矩阵快速幂加速递推
题意: 已知: 当x<10时:f(x)=x 否则:f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + --+ a9 * f(x-10); 求:f(x ...
- HDU5950 Recursive sequence (矩阵快速幂加速递推) (2016ACM/ICPC亚洲赛区沈阳站 Problem C)
题目链接:传送门 题目: Recursive sequence Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total ...
- CH3401 石头游戏(矩阵快速幂加速递推)
题目链接:传送门 题目: 石头游戏 0x30「数学知识」例题 描述 石头游戏在一个 n 行 m 列 (≤n,m≤) 的网格上进行,每个格子对应一种操作序列,操作序列至多有10种,分别用0~9这10个数 ...
- 洛谷P1357 花园(状态压缩 + 矩阵快速幂加速递推)
题目链接:传送门 题目: 题目描述 小L有一座环形花园,沿花园的顺时针方向,他把各个花圃编号为1~N(<=N<=^).他的环形花园每天都会换一个新花样,但他的花园都不外乎一个规则,任意相邻 ...
- [bzoj1008](HNOI2008)越狱(矩阵快速幂加速递推)
Description 监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱 In ...
- [bzoj1009](HNOI2008)GT考试 (kmp+矩阵快速幂加速递推)
Description 阿 申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字.他的不吉利数学 A1A2...Am(0&l ...
- 2019.2.25考试T1, 矩阵快速幂加速递推+单位根反演(容斥)
\(\color{#0066ff}{题解}\) 然后a,b,c通过矩阵加速即可 为什么1出现偶数次3没出现的贡献是上面画绿线的部分呢? 考虑暴力统计这部分贡献,答案为\(\begin{aligned} ...
随机推荐
- rational rose java.lang.classNotFoundException
C:\Windows\Java\TrustLib\RoseDataModeler.zip;C:\Windows\Java\TrustLib\comwrappers.zip;C:\Win ...
- pycharm开发工具,使用
在pycharm中,打的断点,仅在调试模式下,即debug 模式下,才有效 Use Alt + Shift + C to quickly review your recent changes to t ...
- how to get ubuntu current default runlevel
[Purpose] Learning how to get ubuntu current default runlevel [Eevironment] Ubuntu 1 ...
- 延时显示(类QQ头像显示)
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- 跑caffe过程中的备忘
1*1卷积比如一张500*500且厚度depth为100的图片在20个filter上做1*1卷积,那么结果大小为500*500*20 只有池化改变图片的大小 一个大的全连接层可以理解为一个神经网络,这 ...
- 准备下上机考试,各种排序!!以后再添加和仿真像wiki上那样!
#include <stdio.h> #include <string.h> #define N 6 typedef struct { ]; int score; }stude ...
- 线程queue与进程queue
进程queue: from multiprocessing import Queue,Process def func(qq): qq.put('function:我要放数据,给你来取...') if ...
- idea查看jar包是否存在
idea在project目录下如下图(1),是总的pom文件,定义了四个子模块共用的依赖,并且其中定义了四个子模块,,每个模块都有各自的pom.xml文件.结构目录只有一个总的lib库. 但是可能在s ...
- eclipse配置和使用memory Analyse分析内存
1. 安装 在Eclipse help -> Eclipse Marketplace下搜索Memory: 图 1-1 搜索MAT插件 按照步骤安装完成重启即可. 2. 测试代码准备 测试代码 ...
- bootstrapTable--4.删除和批量删除
http://blog.csdn.net/qq_26553781/article/details/78058389 ------------------------------------------ ...