题目链接: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项(矩阵快速幂)相关推荐

  1. 51Nod-1126 求递推序列的第N项【递推序列+模除】

    1126 求递推序列的第N项 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * ...

  2. 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释

    题目: 看起来比较难,范围10^9 O(n)都过不了,但是仅仅是看起来.(虽然我WA了7次 TLE了3次,被自己蠢哭) 我们观察到 0 <= f[i] <= 6 就简单了,就像小学初中学的 ...

  3. 求递推序列的第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)的值. 输入 输 ...

  4. 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 输 ...

  5. 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 输 ...

  6. 求递推序列的第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 ...

  7. 蓝桥杯 算法提高 递推求值(矩阵快速幂)详解

    传送门 问题描述 已知递推公式: 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 ...

  8. NYOJ 301 递推求值(矩阵快速幂)

    递推求值 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n ...

  9. nyoj 301递推求值 (矩阵+快速幂)

    题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=301 题意:给你一个递推公式:f(n)=a*f(n-2)+b*f(n-1)+c 并且告诉你a, ...

最新文章

  1. PostgreSQL学习笔记(1)
  2. 付睿:对新事物的追寻之旅 | 优秀毕业生专访
  3. AlwaysOn 部分笔记及文档连接
  4. S3C2443时钟管理
  5. Angular workspace默认的packages
  6. 大omega记号_什么是大欧米茄符号?
  7. 三星旗舰机系列名称即将更换 S10或成最后绝唱
  8. python socket epoll
  9. 电脑自动关机设置方法
  10. 这四行棘手的C代码背后的概念
  11. 重新认识C#: 玩转指针
  12. mysql跨服务器查询
  13. c语言线性链表的插入,线性链表的创建_插入_删除_操作_C语言
  14. winrm java客户端_Ansible for Windows:WinRM HTTPS设置
  15. 模拟赛 Jams倒酒
  16. Nature Communications:使用连接组的嵌入向量表征映射大脑结构与功能之间的高阶关系
  17. c语言 m个数 取n个数,本题要求编写程序,根据公式Cnm=m!(n−m)!n!算出从n个不同元素中取出m个元素(m≤n)的组合数。...
  18. *继承IObjectSafety接口,实现vb activeX控件安全性(IE不提示安全问题)
  19. Windows7下载IE浏览器11版本
  20. 论文投稿指南——中文核心期刊推荐(环境科学)

热门文章

  1. python生成随机数random操作_Python random生成随机数示例
  2. python高阶_Python高阶学习
  3. python构造函数_Python构造函数
  4. fastjson jsonobject 转bean失败_FastJson是如何导致App Crash的
  5. php毛玻璃,毛玻璃的性质及功能特点
  6. 计算机二级考试考不考二进制,如何通过计算机一、二级考试?方法很重要,过来人的经验告诉你...
  7. return error怎么定义_这一次搞懂Spring自定义标签以及注解解析原理
  8. mysql 函数事务_MySQL:函数和事务
  9. 刚构桥的优缺点_[中交公规院]预应力连续刚构桥总体设计及主要尺寸
  10. c++函数返回二维数组_C++ 怎样让函数返回数组