[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 }
View Code

 

posted @ 2019-11-15 20:57  PYWBKTDA  阅读(170)  评论(0编辑  收藏  举报