首页 > 代码库 > loj #100. 矩阵乘法
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 94 -7 5 -5 910 -2 -10 5 5-3 -7 -3 8 -2-6 7 7 3 -2
样例输出
999999898 149 153 999999929 999999951999999997 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 ^ 91≤n,p,m≤500, −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. 矩阵乘法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。