只能默默地说这题真坑爹啊。。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int const MAXN = 810;
int const MOD = 3;
int a[MAXN][MAXN],b[MAXN][MAXN],c[MAXN][MAXN];
void Init(){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
}
void Add(int n){
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
if(!a[i][j]) continue;
for(int k = 1;k <= n;k++){
c[i][k] = c[i][k] + a[i][j] * b[j][k];
}
}
}
}
int main(){
int n;
while(~scanf("%d",&n)){
Init();
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
scanf("%d",&a[i][j]);
a[i][j] %= MOD;
}
}
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
scanf("%d",&b[i][j]);
b[i][j] %= MOD;
}
}
Add(n);
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
if(j != n) printf("%d ",c[i][j] % MOD);
else printf("%d\n",c[i][j] % MOD);
}
}
}
return 0;
}