#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 800 + 5;
int matrix1[maxn][maxn], matrix2[maxn][maxn], matrix[maxn][maxn];
int n;
int main()
{
while(~scanf("%d", & n))
{
memset(matrix, 0, sizeof(matrix));
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j ++)
{
scanf("%d", & matrix1[i][j]);
matrix1[i][j] %= 3;
}
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j ++)
{
scanf("%d", & matrix2[i][j]);
matrix2[i][j] %= 3;
}
for(int k = 0; k < n; k ++)
for(int i = 0; i < n; i ++)
for(int j = 0; j < n; j ++)
matrix[i][j] += matrix1[i][k] * matrix2[k][j];
for(int i = 0; i < n; i ++)
{
for(int j = 0; j < n - 1; j ++)
printf("%d ", matrix[i][j] % 3);
printf("%d\n", matrix[i][n - 1] % 3);
}
}
return 0;
}
题意:输入一个n。再输入两个规格为n * n的矩阵。之后计算两个矩阵相乘后所得矩阵(结果矩阵每个元素都对3取余)。
题解:是压着时间过的。一切看脸。TLE很正常..记得在原代码上改了——1.输入时直接对3取余。2.就是改变三重循环最里面的计算乘积和的式子。matrix[i][j] += matrix1[i][k] * matrix2[k][j]。matrix1[i][k]按着行 matrix2[k][j]按着列 之后按着k不断循环+..(难表达 可模拟)