[bzoj2396]神奇的矩阵

99封情书 提交于 2019-12-04 14:04:43

再随机生成一个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

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!