loj #100. 矩阵乘法

Posted Nico&11101001

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了loj #100. 矩阵乘法相关的知识,希望对你有一定的参考价值。

题目描述

这是一道模板题。

分别给定 n×p n \times pn×p 和 p×m p \times mp×m 的两个矩阵 A AA 和 B BB,求 A×B A \times BA×B。

输入格式

第一行三个正整数 n nn、p pp、m mm,表示矩阵的长宽。
之后的 n nn 行,每行 p pp 个整数,表示矩阵 A AA。
之后的 p pp 行,每行 m mm 个整数,表示矩阵 B BB。

输出格式

输出 n nn 行,每行 m mm 个整数,表示矩阵 A×B A \times BA×B,每个数模 109+7 10 ^ 9 + 710?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 1 \leq n, p, m \leq 500,\ -10 ^ 9 \leq A_{i, j}, B_{i, j} \leq 10 ^ 91n,p,m500, 10?9??A?i,j??,B?i,j??10?9??

矩阵乘法

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=510,mod=1e9+7;
int a[N][N],b[N][N],c[N][N];
int n,p,m;
int main()
{
    scanf("%d%d%d",&n,&p,&m);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=p;j++)scanf("%d",&a[i][j]),a[i][j]=(a[i][j]+mod)%mod;
    for(int i=1;i<=p;i++)
        for(int j=1;j<=m;j++)scanf("%d",&b[i][j]),b[i][j]=(b[i][j]+mod)%mod;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            for(int k=1;k<=p;k++)
                c[i][j]=(long long)(1ll*c[i][j]+1ll*a[i][k]*b[k][j]%mod)%mod;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)printf("%d ",c[i][j]);
        puts("");
    }
    return 0;
}

 

 

以上是关于loj #100. 矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中并行化以下代码片段?

Python+CUDA三种方式实现,用矩阵乘法举例

LibreOJ #100. 矩阵乘法

BZOJ4861[Beijing2017]魔法咒语 矩阵乘法+AC自动机+DP

LOJ1070(SummerTrainingDay05-B 矩阵快速幂)

Loj 6283. 数列分块入门 7