[51NOD1126]求递推序列的第n项(矩阵快速幂)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126
存在参数a,b为负数的情况。这时候要这么处理:
根据mod值(7)加至刚好大于0。
否则有些样例是过不去的。
1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <climits> 6 #include <complex> 7 #include <fstream> 8 #include <cassert> 9 #include <cstdio> 10 #include <bitset> 11 #include <vector> 12 #include <deque> 13 #include <queue> 14 #include <stack> 15 #include <ctime> 16 #include <set> 17 #include <map> 18 #include <cmath> 19 20 using namespace std; 21 22 const int maxn = 10; 23 typedef struct Matrix { 24 int m[maxn][maxn]; 25 int r; 26 int c; 27 Matrix(){ 28 r = c = 0; 29 memset(m, 0, sizeof(m)); 30 } 31 } Matrix; 32 33 Matrix mul(Matrix m1, Matrix m2, int mod) { 34 Matrix ans = Matrix(); 35 ans.r = m1.r; 36 ans.c = m2.c; 37 for(int i = 1; i <= m1.r; i++) { 38 for(int j = 1; j <= m2.r; j++) { 39 for(int k = 1; k <= m2.c; k++) { 40 if(m2.m[j][k] == 0) continue; 41 ans.m[i][k] = ((ans.m[i][k] + m1.m[i][j] * m2.m[j][k] % mod) % mod) % mod; 42 } 43 } 44 } 45 return ans; 46 } 47 48 Matrix quickmul(Matrix m, int n, int mod) { 49 Matrix ans = Matrix(); 50 for(int i = 1; i <= m.r; i++) { 51 ans.m[i][i] = 1; 52 } 53 ans.r = m.r; 54 ans.c = m.c; 55 while(n) { 56 if(n & 1) { 57 ans = mul(m, ans, mod); 58 } 59 m = mul(m, m, mod); 60 n >>= 1; 61 } 62 return ans; 63 } 64 65 int a, b, n, m; 66 67 int main() { 68 // freopen("in", "r", stdin); 69 m = 7; 70 while(~scanf("%d %d %d", &a, &b, &n)) { 71 Matrix p; 72 while(a < 0) a += m; 73 while(b < 0) b += m; 74 p.r = 2, p.c = 1; 75 p.m[1][1] = 1; 76 p.m[2][1] = 1; 77 if(n <= 4) { 78 printf("%d\n", p.m[4-n+1][1] % m); 79 continue; 80 } 81 Matrix s; 82 s.r = s.c = 2; 83 s.m[1][1] = a, s.m[1][2] = b; 84 s.m[2][1] = 1, s.m[2][2] = 0; 85 s = quickmul(s, n-2, m); 86 int ans = 0; 87 for(int i = 1; i <= p.r; i++) { 88 ans = (ans + (p.m[i][1] * s.m[1][i]) % m) % m; 89 } 90 printf("%d\n", ans % m); 91 } 92 return 0; 93 }
转载于:https://www.cnblogs.com/kirai/p/5473756.html
[51NOD1126]求递推序列的第n项(矩阵快速幂)相关推荐
- 51Nod-1126 求递推序列的第N项【递推序列+模除】
1126 求递推序列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * ...
- 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
题目: 看起来比较难,范围10^9 O(n)都过不了,但是仅仅是看起来.(虽然我WA了7次 TLE了3次,被自己蠢哭) 我们观察到 0 <= f[i] <= 6 就简单了,就像小学初中学的 ...
- 求递推序列的第N项(51Nod-1126)
题目 有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. 输入 输 ...
- 1126 求递推序列的第N项 (Fnb + mod + 思维)
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...
- 515Nod 1126 求递推序列的第n项【矩阵快速幂】
有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...
- 求递推序列的第N项 51Nod - 1126
Description 有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n ...
- 蓝桥杯 算法提高 递推求值(矩阵快速幂)详解
传送门 问题描述 已知递推公式: F(n, 1)=F(n-1, 2) + 2F(n-3, 1) + 5, F(n, 2)=F(n-1, 1) + 3F(n-3, 1) + 2F(n-3, 2) + 3 ...
- NYOJ 301 递推求值(矩阵快速幂)
递推求值 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n ...
- nyoj 301递推求值 (矩阵+快速幂)
题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=301 题意:给你一个递推公式:f(n)=a*f(n-2)+b*f(n-1)+c 并且告诉你a, ...
最新文章
- PostgreSQL学习笔记(1)
- 付睿:对新事物的追寻之旅 | 优秀毕业生专访
- AlwaysOn 部分笔记及文档连接
- S3C2443时钟管理
- Angular workspace默认的packages
- 大omega记号_什么是大欧米茄符号?
- 三星旗舰机系列名称即将更换 S10或成最后绝唱
- python socket epoll
- 电脑自动关机设置方法
- 这四行棘手的C代码背后的概念
- 重新认识C#: 玩转指针
- mysql跨服务器查询
- c语言线性链表的插入,线性链表的创建_插入_删除_操作_C语言
- winrm java客户端_Ansible for Windows:WinRM HTTPS设置
- 模拟赛 Jams倒酒
- Nature Communications:使用连接组的嵌入向量表征映射大脑结构与功能之间的高阶关系
- c语言 m个数 取n个数,本题要求编写程序,根据公式Cnm=m!(n−m)!n!算出从n个不同元素中取出m个元素(m≤n)的组合数。...
- *继承IObjectSafety接口,实现vb activeX控件安全性(IE不提示安全问题)
- Windows7下载IE浏览器11版本
- 论文投稿指南——中文核心期刊推荐(环境科学)
热门文章
- python生成随机数random操作_Python random生成随机数示例
- python高阶_Python高阶学习
- python构造函数_Python构造函数
- fastjson jsonobject 转bean失败_FastJson是如何导致App Crash的
- php毛玻璃,毛玻璃的性质及功能特点
- 计算机二级考试考不考二进制,如何通过计算机一、二级考试?方法很重要,过来人的经验告诉你...
- return error怎么定义_这一次搞懂Spring自定义标签以及注解解析原理
- mysql 函数事务_MySQL:函数和事务
- 刚构桥的优缺点_[中交公规院]预应力连续刚构桥总体设计及主要尺寸
- c++函数返回二维数组_C++ 怎样让函数返回数组