再随机生成一个n*1的矩阵D,若$A*B=C$,则显然有$A*B*D=C*D$,根据结合律,又有$A*(B*D)=C*D$
由于(n*n)*(n*1)的复杂度是$o(n^2)$的,因此暴力乘法即可
(程序的做法是判断乘起来的矩阵所有数字之和与C是否相同,即求$a[i][k]*b[k][j]$,对a的每一列预处理求和,然后就可以快速计算

1 #include<bits/stdc++.h>
2 using namespace std;
3 int n,x,s[1005];
4 long long ans;
5 int main(){
6 while (scanf("%d",&n)!=EOF){
7 memset(s,0,sizeof(s));
8 ans=0;
9 for(int i=1;i<=n;i++)
10 for(int j=1;j<=n;j++){
11 scanf("%d",&x);
12 s[j]+=x;
13 }
14 for(int i=1;i<=n;i++)
15 for(int j=1;j<=n;j++){
16 scanf("%d",&x);
17 ans+=x*s[i];
18 }
19 for(int i=1;i<=n;i++)
20 for(int j=1;j<=n;j++){
21 scanf("%d",&x);
22 ans-=x;
23 }
24 if (ans)printf("No\n");
25 else printf("Yes\n");
26 }
27 }
