题目大意:给出两个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;
}