loj #100. 矩阵乘法

题目描述

这是一道模板题。

分别给定 n×p  和 p×m  的两个矩阵 A和 B,求 A×B

输入

第一行三个正整数 pm,表示矩阵的长宽。
之后的 行,每行  个整数,表示矩阵 A
之后的 p 行,每行 个整数,表示矩阵 B

输出

输出 行,每行 m个整数,表示矩阵 A×B ,每个数模  10 ^ 9 + 7 输出。

样例输入

3 4 5
-2 -8 -9 8
-10 0 6 -8
-10 -6 6 9
4 -7 5 -5 9
10 -2 -10 5 5
-3 -7 -3 8 -2
-6 7 7 3 -2

样例输出

999999898 149 153 999999929 999999951
999999997 999999979 999999883 74 999999921
999999835 103 55 95 999999857

提示

1≤n,p,m≤500, −109≤Ai,j,Bi,j≤109 

矩阵乘法,结果矩阵中每个元素都对1000000007取余,当数字是负数时间,加上1000000007,而正数时间直接求余。应注意数据大小,会超过整形的数据范围,因此,计算时间应该加上取余计算。

代码:

#include
#include
long long a[510][510];
long long b[510][510];
long long c[510][510];
int main()
{
int m,p,n,i,j,k,x;
long long inf=1000000007;
while(scanf("%d%d%d",&n,&p,&m)!=EOF)
{
memset(c,0,sizeof(c));
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
  for(i=0;i   for(j=0;j scanf("%lld",&a[i][j]);
for(i=0;i for(j=0;j   scanf("%lld",&b[i][j]);
for(i=0;i {
  for(j=0;j  {
  for(k=0;k  {
   c[i][k]=c[i][k]+a[i][j]*b[j][k];
c[i][k]%=inf;
}
}
 }
 for(i=0;i  {
  printf("%lld",(c[i][0]%inf+inf)%inf);
  for(j=1;j  {
    printf(" %lld",(c[i][j]%inf+inf)%inf);
}
    printf("\n");
  }
}

return 0; 
}

你可能感兴趣的:(模拟)