POJ 3233 Matrix Power Series (矩阵快速幂)
来源:互联网 发布:ati备份 linux 编辑:程序博客网 时间:2024/04/30 00:22
点击打开链接
注意这里的A是一个矩阵 求T的次幂的时候图中是在做分块矩阵的乘法,但是计算机运算时要按照普通矩阵乘法来做,所以要先写出T。
最后求A+A^2+……+A^K是先求出T^(k+1)然后分割成四个分块矩阵,右上角的那个减去单位矩阵就是答案
#include<cstdio>#include<cstring>#include<string>using namespace std;struct matrix{int a[100][100];}base, ans;int n, k, m;matrix multiply(matrix x, matrix y){ matrix tmp; for (int i = 0; i < 2*n; i++) for (int j = 0; j < 2*n; j++) { tmp.a[i][j] = 0; for (int k = 0; k < 2*n; k++) tmp.a[i][j] = (tmp.a[i][j] + x.a[i][k] * y.a[k][j]) % m; } return tmp;}void fast_mod(int l){ while (l) { if (l & 1) ans = multiply(ans, base); base = multiply(base, base); l >>= 1; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i == j) { if (ans.a[i][j+n] == 0) ans.a[i][j+n] = m; printf("%d ", ans.a[i][j+n]-1); // 这里容易出现bug } else printf("%d ", ans.a[i][j+n]); } printf("\n"); }}int main(){ scanf("%d%d%d", &n, &k, &m); memset(base.a, 0, sizeof(base.a)); for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) { scanf("%d", &base.a[i][j]); if (i == j) base.a[i][j+n] = 1; if (i == j) base.a[i+n][j+n] = 1; } memset(ans.a, 0, sizeof(ans.a)); for (int i = 0; i < 2*n; i++) ans.a[i][i] = 1; fast_mod(k+1); return 0;}
0 0
- poj 3233 Matrix Power Series(矩阵快速幂)
- poj 3233 Matrix Power Series(矩阵快速幂)
- poj 3233 Matrix Power Series(矩阵快速幂)
- poj 3233 Matrix Power Series(矩阵二分,快速幂)
- poj 3233 Matrix Power Series(矩阵,快速幂)
- poj 3233 Matrix Power Series(矩阵快速幂)
- POJ 3233 Matrix Power Series(矩阵快速幂)
- POJ 3233 Matrix Power Series (矩阵快速幂)
- POJ 3233 Matrix Power Series(矩阵快速幂)
- poj 3233 Matrix Power Series(矩阵快速幂+分治)
- POJ 3233 Matrix Power Series(矩阵快速幂)
- POJ 3233 Matrix Power Series(矩阵快速幂)
- [POJ 3233] Matrix Power Series (矩阵快速幂)
- 【POJ 3233】Matrix Power Series(矩阵快速幂)
- poj 3233 Matrix Power Series (矩阵快速幂)
- POJ-3233 Matrix Power Series(矩阵快速幂)
- POJ 3233 Matrix Power Series(矩阵快速幂)
- POJ 3233 Matrix Power Series 【矩阵快速幂,矩阵加速】
- 读书笔记 JavaScript高级程序设计 第三章 基本概念-数据类型
- 103. SPL 标志库
- 第十章编程练习(1)
- stack related algorithms summary
- as在同时导入xUtils_3最新版和侧滑菜单SlidingMenu菜单中遇到的问题
- POJ 3233 Matrix Power Series (矩阵快速幂)
- lua os.time与os.date的简单用法
- Combination Sum题解
- ln 命令
- 使用nohup让程序在远程主机后台运行
- 关于QT、QT creator和编译器,新手入门必知的一些知识
- Light OJ 1025 The Specials Menu (区间DP)
- Linux下修改ulimit设置的最大进程数(java.lang.OutOfMemoryError: unable to create new native thread)
- 【blog】博客介绍0v0