蓝桥-BASIC-17-矩阵乘法
2017-06-01 16:00
274 查看
ACM模版
![](http://img.blog.csdn.net/20170601155753448?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZl96eWo=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
其实数据范围这么小,普通的矩阵乘法乘 M−1 次就行,完全没必要用矩阵快速幂,非但没有什么效率上的提升,说不定还会慢一些,但是我就是喜欢用矩阵快速幂……
描述
题解
模版题,矩阵快速幂,但是蓝桥不让带模版,还是自己手打吧!其实数据范围这么小,普通的矩阵乘法乘 M−1 次就行,完全没必要用矩阵快速幂,非但没有什么效率上的提升,说不定还会慢一些,但是我就是喜欢用矩阵快速幂……
代码
#include <cstdio> #include <algorithm> #include <iostream> using namespace std; const int MAXN = 33; int n; struct mat { int m[MAXN][MAXN]; } unit; mat operator * (mat a, mat b) { mat ret; int x; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { x = 0; for (int k = 0; k < n; k++) { x += a.m[i][k] * b.m[k][j]; } ret.m[i][j] = x; } } return ret; } void init_unit() { for (int i = 0; i < MAXN; i++) { unit.m[i][i] = 1; } } mat pow_mat(mat a, int n) { mat ret = unit; while (n) { if (n & 1) { ret = ret * a; } n >>= 1; a = a * a; } return ret; } int main() { int x; init_unit(); while (cin >> n >> x) { mat a; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> a.m[i][j]; } } a = pow_mat(a, x); // a 矩阵的 x 次幂 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j + 1 == n) { cout << a.m[i][j] << endl; } else { cout << a.m[i][j] << ' '; } } } } return 0; }
参考
《矩阵相关》相关文章推荐
- 蓝桥-BASIC-17 矩阵乘法
- 蓝桥杯 BASIC-17 基础练习 矩阵乘法
- 蓝桥杯BASIC-17(矩阵乘法)
- [BASIC-17] 矩阵乘法
- [BASIC-17] - 矩阵乘法 (Unsolved)
- 蓝桥杯 BASIC-17 基础练习 矩阵乘法
- 蓝桥杯 BASIC_17 矩阵乘法 (矩阵快速幂)
- 基础练习 BASIC-17 矩阵乘法
- BASIC-17 / Tsinsen 1041 矩阵乘法(java)
- BASIC-17 VIP试题 矩阵乘法
- 蓝桥杯 17 基础练习 矩阵乘法
- 蓝桥杯 BASIC 27 矩阵乘法(矩阵、二维数组)
- BASIC14-17 时间转换 字符串对比 分解质因数 矩阵乘法
- BZOJ 4778 Usaco2017 Open COWBASIC 矩阵乘法
- 蓝桥 ADV-232 算法提高 矩阵乘法 【区间DP】
- 【蓝桥】算法提高 矩阵乘法
- 蓝桥 ADV-232 算法提高 矩阵乘法 【区间DP】
- 基础练习-BASIC-17 矩阵相乘
- 蓝桥 矩阵乘法(区间dp)
- 【poj3070】矩阵乘法求斐波那契数列