BIT 1092 Matrix Multiplication

来源:互联网 发布:c 九九乘法表代码 VB 编辑:程序博客网 时间:2024/05/01 23:05

题目大意:给出两个n*n的矩阵A,B(n<500),再给出一个矩阵C,问A*B是否等于C,数据保证不用高精度。。。。

 

考察点:??

 

思路分析:如果暴力算的话,两个n*n的矩阵要用n^3的复杂度,肯定超时。

若AB=C,那么XAB=XC,这样的话我们可以构造一个行向量X,X(1*N),这样的话N^3的复杂度就降到N^2了

 

#include<stdio.h>long long n;long long a[510][510],b[510][510],c[510][510];long long temp[510],temp1[510],temp2[510];int main(){    int i,j;    while(scanf("%d",&n)!=EOF)    {    memset(temp,0,sizeof(temp));    memset(temp1,0,sizeof(temp1));    memset(temp2,0,sizeof(temp2));    for (i=1;i<=n;i++)      for (j=1;j<=n;j++)        scanf("%lld",&a[i][j]);    for (i=1;i<=n;i++)      for (j=1;j<=n;j++)        scanf("%lld",&b[i][j]);    for (i=1;i<=n;i++)      for (j=1;j<=n;j++)        scanf("%lld",&c[i][j]);    for (i=1;i<=n;i++)      temp[i]=i;    for (i=1;i<=n;i++)      for (j=1;j<=n;j++)        temp1[i]+=temp[j]*a[j][i];    for (i=1;i<=n;i++)      for (j=1;j<=n;j++)        temp2[i]+=temp1[j]*b[j][i];    memset(temp1,0,sizeof(temp1));    for (i=1;i<=n;i++)      for (j=1;j<=n;j++)        temp1[i]+=temp[j]*c[j][i];    for (i=1;i<=n;i++)    {      if (temp1[i]!=temp2[i]) {printf("NO\n");break;}      if (i==n) printf("YES\n");    }    }    return 0;}                                     


 

原创粉丝点击