题目链接。hdu 4965 Fast Matrix Calculation

题目大意:给定两个矩阵A,B,分别为N*K和K*N。

  1. 矩阵C = A*B
  2. 矩阵M=CN∗N
  3. 将矩阵M中的全部元素取模6,得到新矩阵M‘
  4. 计算矩阵M’中全部元素的和

解题思路:由于矩阵C为N*N的矩阵,N最大为1000。就算用高速幂也超时,可是由于C = A*B, 所以CN∗N=ABAB…AB=AC′N∗N−1B,C‘
= B*A, 为K*K的矩阵,K最大为6。全然能够接受。

#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std;
const int maxn = 1005;
const int MOD = 6;
typedef int Mat[maxn][maxn]; int N, K;
Mat A, B, X, Y, tmp; void put (Mat x, int r, int c) {
for (int i = 0; i < K; i++) {
for (int j = 0; j < K; j++)
printf("%d ", x[i][j]);
printf("\n");
}
} void mul_mat (Mat ret, Mat a, Mat b, int r, int t, int c) {
memset(tmp, 0, sizeof(tmp)); for (int k = 0; k < t; k++) {
for (int i = 0; i < r; i++)
for (int j = 0; j < c; j++)
tmp[i][j] = (tmp[i][j] + a[i][k] * b[k][j]) % MOD;
}
memcpy(ret, tmp, sizeof(tmp));
} void pow_mat (Mat ret, Mat x, int n) {
memset(Y, 0, sizeof(Y));
for (int i = 0; i < K; i++)
Y[i][i] = 1; while (n) {
if (n&1)
mul_mat(Y, Y, x, K, K, K);
mul_mat(x, x, x, K, K, K);
n >>= 1;
}
memcpy(ret, Y, sizeof(Y));
} void init () {
for (int i = 0; i < N; i++)
for (int j = 0; j < K; j++)
scanf("%d", &A[i][j]); for (int i = 0; i < K; i++)
for (int j = 0; j < N; j++)
scanf("%d", &B[i][j]);
} int main () {
while (scanf("%d%d", &N, &K) == 2 && N + K) {
init(); mul_mat(X, B, A, K, N, K); pow_mat(X, X, N*N-1); mul_mat(X, A, X, N, K, K);
mul_mat(X, X, B, N, K, N); int ans = 0;
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
ans += X[i][j];
printf("%d\n", ans);
}
return 0;
}

最新文章

  1. Java基础知识笔记(二:泛型和枚举)
  2. 使用虚拟机win7系统遇到问题及解决
  3. Dorado7检验器失效原因分析
  4. Py Split and Count For &quot;PFW Impact Crusher For Sale South Africa&quot;
  5. pyhton类集成
  6. 24种设计模式--状态模式【State Pattern】
  7. 基于xmpp openfire smack开发之smack类库介绍和使用[2]
  8. 从一个PHP数据生成 CSV 文件
  9. hdu 4545 魔法串 2013金山西山居创意游戏程序挑战赛——初赛(1)
  10. Linux fstab 参数详解
  11. Dubbo.xml配置源-Dubbo.xsd分析
  12. 腾讯云数据库团队:SQL Server 数据加密功能解析
  13. android 读取系统文件 wpa_supplicant
  14. [Swift]LeetCode507. 完美数 | Perfect Number
  15. qrcode render 二维码扫描读取
  16. SQL - 常用的特殊查询
  17. 使用python快速搭建本地网站
  18. HTML 背景实例
  19. win10找回Windows照片查看器
  20. Java学习个人总结

热门文章

  1. Java中的反射——(1)什么是反射
  2. 基于Android 下载文件时,更新UI简单帮助类
  3. 源代码分析:LayoutParams的wrap_content, match_parent, 而详细的价值观
  4. Java贪吃蛇游戏
  5. Mvc后台接收 参数
  6. POJ1274 The Perfect Stall【二部图最大匹配】
  7. JQuery操作select checkbox radio总结
  8. c++分割字符串(类似于boost::split)
  9. StringUtils.isNumeric(String str) 的一个坑(转)
  10. nginx+lua+redis构建高并发应用(转)