PKU3318 Matrix Multiplication
#include<iostream>
using namespace std;
int n;
struct mat
{
int a[550][550];
}A,B,C;
int X[550];
int Y[550];
int input(mat& a)
{
int i,j;
for(i=0;i<n;++i)
for(j=0;j<n;++j)
scanf("%d",&a.a[i][j]);
return 0;
}
int mul(int* a,mat& b)
{
int i,j;
for(i=0;i<n;++i)
for(j=0;j<n;++j)
b.a[i][j]*=a[i];
for(i=0;i<n;++i)
{
a[i]=0;
for(j=0;j<n;++j)
a[i]+=b.a[j][i];
}
return 0;
}
int main()
{
int i;
scanf("%d",&n);
input(A);input(B);input(C);
srand(123456);
for(i=0;i<n;++i)X[i]=Y[i]=rand();
mul(X,A);mul(X,B);mul(Y,C);
for(i=0;i<n;++i)
{
//printf("%d %d\n",X[i],Y[i]);
if(X[i]!=Y[i])break;
}
if(i==n)
printf("YES\n");
else
printf("NO\n");
return 0;
}
using namespace std;
int n;
struct mat
{
int a[550][550];
}A,B,C;
int X[550];
int Y[550];
int input(mat& a)
{
int i,j;
for(i=0;i<n;++i)
for(j=0;j<n;++j)
scanf("%d",&a.a[i][j]);
return 0;
}
int mul(int* a,mat& b)
{
int i,j;
for(i=0;i<n;++i)
for(j=0;j<n;++j)
b.a[i][j]*=a[i];
for(i=0;i<n;++i)
{
a[i]=0;
for(j=0;j<n;++j)
a[i]+=b.a[j][i];
}
return 0;
}
int main()
{
int i;
scanf("%d",&n);
input(A);input(B);input(C);
srand(123456);
for(i=0;i<n;++i)X[i]=Y[i]=rand();
mul(X,A);mul(X,B);mul(Y,C);
for(i=0;i<n;++i)
{
//printf("%d %d\n",X[i],Y[i]);
if(X[i]!=Y[i])break;
}
if(i==n)
printf("YES\n");
else
printf("NO\n");
return 0;
}

浙公网安备 33010602011771号