1 0 1 2 0 1 2 3 4 5 6 7
0 0 1 2 1
题意 :矩阵相乘
思路:复杂度O(n^3)是接受不了的,但是出于题目的意思%3,所以我们可以不去处理0的情况,我们把原本最里面的那层for(k ) 拿到最外面,然后当有一行的某列出现0 的时候,那么对应的所有列对应的行也就不加入计算了,再加上出入外挂水过
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> typedef long long ll; using namespace std; const int maxn = 805; int a[maxn][maxn], b[maxn][maxn], c[maxn][maxn]; int n; int Scan() { int res = 0, ch, flag = 0; if ((ch = getchar()) == '-') flag = 1; else if (ch >= '0' && ch <= '9') res = ch - '0'; while ((ch = getchar()) >= '0' && ch <= '9') res = res * 10 + ch - '0'; return flag?-res:res; } int main() { while (scanf("%d", &n) != EOF) { for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) { a[i][j] = Scan() % 3; c[i][j] = 0; } for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) b[i][j] = Scan() % 3; for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) if (a[i][k]) for (int j = 1; j <= n; j++) c[i][j] += a[i][k] * b[k][j]; for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) printf("%d%c", c[i][j]%3, (j==n)?'\n':' '); } return 0; }
HDU 4920 Matrix multiplication,布布扣,bubuko.com
HDU 4920 Matrix multiplication
原文:http://blog.csdn.net/u011345136/article/details/38390839