[bzoj2396]神奇的矩阵
再随机生成一个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 }