HDU 4965 Fast Matrix Calculation(矩阵快速幂)
来源:互联网 发布:嬲 知乎 编辑:程序博客网 时间:2024/05/21 09:28
HDU 4965 Fast Matrix Calculation
题目链接
矩阵相乘为AxBxAxB...乘nn次,可以变成Ax(BxAxBxA...)xB,中间乘nn - 1次,这样中间的矩阵一个只有6x6,就可以用矩阵快速幂搞了
代码:
#include <cstdio>#include <cstring>const int N = 1005;const int M = 10;int n, m;int A[N][M], B[M][N], C[M][M], CC[N][N];int ans[M][M];void tra() { memset(CC, 0, sizeof(CC)); for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { CC[i][j] = 0; for (int k = 0; k < m; k++) { CC[i][j] = (CC[i][j] + C[i][k] * C[k][j]) % 6; } } } for (int i = 0; i < m; i++) for (int j = 0; j < m; j++) C[i][j] = CC[i][j];}void mul() { for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { CC[i][j] = 0; for (int k = 0; k < m; k++) { CC[i][j] = (CC[i][j] + ans[i][k] * C[k][j]) % 6; } } } for (int i = 0; i < m; i++) for (int j = 0; j < m; j++) ans[i][j] = CC[i][j];}void pow_mod(int k) { memset(ans, 0, sizeof(ans)); for (int i = 0; i < m; i++) ans[i][i] = 1; while (k) { if (k&1) mul(); tra(); k >>= 1; }}void init() { for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) scanf("%d", &A[i][j]); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) scanf("%d", &B[i][j]);}int solve() { for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { C[i][j] = 0; for (int k = 0; k < n; k++) { C[i][j] = (C[i][j] + B[i][k] * A[k][j]) % 6; } } } pow_mod(n * n - 1); for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) { C[i][j] = ans[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { CC[i][j] = 0; for (int k = 0; k < m; k++) { CC[i][j] = (CC[i][j] + A[i][k] * C[k][j]) % 6; } } } for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) A[i][j] = CC[i][j]; int ans = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { int sum = 0; for (int k = 0; k < m; k++) { sum = (sum + A[i][k] * B[k][j]) % 6; } ans += sum; } } return ans;}int main() { while (~scanf("%d%d", &n, &m) && n || m) { init(); printf("%d\n", solve()); } return 0;}
1 0
- 【HDU】4965 Fast Matrix Calculation 矩阵快速幂
- HDU 4965 Fast Matrix Calculation 矩阵快速幂
- HDU 4965 Fast Matrix Calculation 矩阵快速幂
- HDU 4965 Fast Matrix Calculation(矩阵快速幂)
- hdu 4965 Fast Matrix Calculation【矩阵快速幂】
- hdu 4965 Fast Matrix Calculation(矩阵快速幂)
- hdu 4965 Fast Matrix Calculation 矩阵快速幂
- hdu 4965 Fast Matrix Calculation(矩阵快速幂)
- HDU 4965 Fast Matrix Calculation | 矩阵快速幂
- HDU 4965 Fast Matrix Calculation(矩阵快速幂)
- hdu 4965 Fast Matrix Calculation【矩阵快速幂模板】
- HDU 4965 Fast Matrix Calculation(矩阵快速幂)
- hdu 4965 Fast Matrix Calculation(矩阵快速幂)
- HDU-4965 Fast Matrix Calculation (矩阵快速幂)
- HDU 4965 Fast Matrix Calculation (矩阵快速幂
- HDU 4965 Fast Matrix Calculation(矩阵快速幂)
- 【矩阵快速幂+矩阵运算性质】Fast Matrix Calculation HDU
- HDU4965-Fast Matrix Calculation(矩阵快速幂)
- AIX/LINUX创建中文文件名称乱码解决
- 类成员私有,公共,保护属性有什么不同
- PopuWindow
- Linux cat命令详解
- 在VMware中的Ubuntu12.04虚拟机上_配置JDK_安装MyEclipse
- HDU 4965 Fast Matrix Calculation(矩阵快速幂)
- 有趣的汇编
- Linux点点滴滴(持续更新)
- 基于注解的SSH将配置精简到极致(1)
- vs2012 + QT 5.2 安装
- IOS TextField弹出键盘挡住输入框的问题
- 【搞搞算法】用遗传算法解决多目标规划问题_论文阅读笔记
- java 的线程同步(synchronized ,wait,notify)
- XHTML 概要