HDU1757-A Simple Math Problem(矩阵快速幂)
来源:互联网 发布:鲁班软件 北京 编辑:程序博客网 时间:2024/05/16 02:05
题目链接
题意:求出f(k) % m
思路:f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10),所以可以得到一个矩阵
(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)
(1, 0, 0, 0, 0, 0, 0, 0, 0, 0)
(0, 1, 0, 0, 0, 0, 0, 0, 0, 0)
(0, 0, 1, 0, 0, 0, 0, 0, 0, 0)
(0, 0, 0, 1, 0, 0, 0, 0, 0, 0)
(0, 0, 0, 0, 1, 0, 0, 0, 0, 0)
(0, 0, 0, 0, 0, 1, 0, 0, 0, 0)
(0, 0, 0, 0, 0, 0, 1, 0, 0, 0)
(0, 0, 0, 0, 0, 0, 0, 1, 0, 0)
(0, 0, 0, 0, 0, 0, 0, 0, 1, 0)*
|f(x - 1), f(x - 2), f(x - 3), f(x - 4), f(x - 5), f(x - 6), f(x - 7), f(x - 8), f(x - 9), f(x - 10)| =
|f(x), f(x - 1), f(x - 2), f(x - 3), f(x - 4), f(x - 5), f(x - 6), f(x - 7), f(x - 8), f(x - 9)|
通过矩阵快速幂求解。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>using namespace std;typedef __int64 ll;const int N = 10;ll k, m;struct mat{ ll s[N][N]; mat() { sizeof(s, 0, sizeof(s)); } mat operator * (const mat& c) { mat ans; memset(ans.s, 0, sizeof(ans.s)); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) for (int k = 0; k < N; k++) ans.s[i][j] = (ans.s[i][j] + s[i][k] * c.s[k][j]) % m; return ans; }};mat state, tmp;void init() { for (int i = 0; i < 10; i++) tmp.s[i][0] = 9 - i; for (int i = 0; i < 10; i++) scanf("%I64d", &state.s[0][i]); for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) if (i - 1 == j) state.s[i][j] = 1;}mat pow_mod(ll k) { if (k == 1) return state; mat a = pow_mod(k / 2); mat ans = a * a; if (k % 2 == 1) ans = ans * state; return ans;}int main() { while (scanf("%I64d%I64d", &k, &m) != EOF) { if (k < 10) printf("%I64d\n", k % m); else { init(); mat ans = pow_mod(k - 9); ans = ans * tmp; printf("%I64d\n", ans.s[0][0]); } } return 0;}
0 0
- Hdu1757 - A Simple Math Problem - 矩阵快速幂
- HDU1757-A Simple Math Problem(矩阵快速幂)
- hdu1757-- A Simple Math Problem(矩阵快速幂优化)
- hdu1757 - A Simple Math Problem 矩阵快速幂
- hdu1757 A Simple Math Problem(矩阵快速幂)
- hdu1757 A Simple Math Problem (矩阵快速幂)
- hdu1757 A Simple Math Problem(矩阵快速幂)
- [HDU1757]A Simple Math Problem(矩阵快速幂)
- hdu1757 A Simple Math Problem(矩阵快速幂题解)
- 【矩阵快速幂】 hdu1757 A Simple Math Problem
- hdu1757 A Simple Math Problem【矩阵快速幂】
- hdu1757 A Simple Math Problem 矩阵快速幂 水题
- HDU1757-A Simple Math Problem,矩阵快速幂,构造矩阵水过
- HDU1757 A Simple Math Problem 矩阵应用
- hdu1757 A Simple Math Problem(矩阵乘法)
- hdu1757 A Simple Math Problem 矩阵乘法
- hdu1757---A Simple Math Problem(矩阵)
- A Simple Math Problem hdu1757
- JSP的九大内置对象简述
- 【IOS 开发】Object - C 入门 之 数据类型详解
- 2015年阿里巴巴校园招聘研发岗在线笔试题(超全)
- MyEclipse 8.6 Loading com.genuitec.eclipse.sqlexplorer
- chapter1 数组
- HDU1757-A Simple Math Problem(矩阵快速幂)
- 敏捷开发方法强调实际交付价值而不是做出一些非凡的但是无法实现的计划和承诺
- Leetcode: Binary Tree Preorder Traversal
- 单链表排序(sort list)
- 1 网桥的原理及在linux内核中的实现
- iOS CoreData的基本用法
- 隐含的this指针
- Webservice之实现
- 求最大公共字符串----发现书上的错误了