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} ...
随机推荐
- pre强制 自动换行
转自:http://www.16sucai.com/2010/10/941.html <pre> 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会 ...
- Javaconfig形式配置Dubbo多注册中心
多注册中心,一般用不到,但是某些情况下的确能解决不少问题,可以将某些dubbo服务注册到2套dubbo系统中,实现服务在2套系统间的共用. 网上的配置说明很多,但包括dubbo官方说明文档都是以xml ...
- shell 通配符
Bash中的通配符 '?' 匹配一个任意字符 '*' 匹配0个或任意多个字符,也就是可以匹配任何内容 '[]' 匹配括号中任意一个字符.例如[abc]代表一定匹配一个字符,或者是a,或者是b,或者是c ...
- 你应该这样理解JVM内存管理
在进行Java程序设计时,一般不涉及内存的分配和内存回收的相关代码,此处引用一句话: Java和C++之间存在一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外的人想进去,墙里面的人想出来 ,个人从这 ...
- InterBase 数据库与驱动 版本不同
[Window Title] Project1 - Delphi 10.1 Berlin - Unit1 [Content] Failed: "unsupported on-disk str ...
- day35 数据库介绍和初识sql
今日内容: 1. 代码: 简易版socketsever 2.数据库(mysql)简单介绍和分类介绍 3.mysql root修改密码 4.修改字符集编码 5.初识sql语句 1.简易版socketse ...
- VSTO:使用C#开发Excel、Word【9】
文件背后的代码VSTO支持文档背后的代码,要求开发人员使用VSTO项目中生成的具有预连接上下文和预连接事件的类.这些类有时被称为“代码后面”类,因为它们是与特定文档或工作表相关联的代码.在Word中, ...
- 50个常用的Linux命令
1.tar tar -xvf archive_name.tar 解压文件 tar -cvf archive_name.tar file 把文件file压缩成archive_name.tar tar ...
- CentOS7安装Nginx及配置
Nginx是一款轻量级的网页服务器.反向代理服务器.相较于Apache.lighttpd具有占有内存少,稳定性高等优势.**它最常的用途是提供反向代理服务.** 安装 在Centos下,yum源不 ...
- 特殊权限stick_bit
stick_bit 防删除位:文件是否可以被某用户删除,主要取决于该文件所在的目录是否对该用户具有写权限.如果没有写权限,则这个目录下的所有文件都不能删除,同时也不能添加新的文件.如果希望用户能够添加 ...