LOJ#100. 【模板】矩阵乘法

今天好像是模板的一天。

传送门

题意

给定矩阵$A,B$,求$A\times B$。

题解

不会矩阵乘法的请移步这里

好水啊

不过还是没有一次AC

都怪STL array

我代码里原先用了array<array<int, 501>,501>表示矩阵

结果后来。。。RE了

换成vector一切无毛病

上代码:

#include <bits/stdc++.h>
using namespace std;

typedef vector<vector<int> > Matrix;
const int P = 1000000007;

void yhx(int&x) {
	while(x<0) x+=P;
	x%=P;
}
Matrix MatrixMul(const Matrix &A, const Matrix &B, int n, int p, int m) {
	Matrix ret(n, vector<int>(m));
	for (int i=0; i<n; i++)
		for (int j=0; j<m; j++) {
			ret[i][j] = 0;
			for (int k=0; k<p; k++)
				ret[i][j] = (1ll * A[i][k] * B[k][j] % P + ret[i][j]) % P,yhx(ret[i][j]);
		}
	return ret;
}

int main() {
	int n,m,p;
	scanf("%d%d%d", &n,&p,&m);
	Matrix A(n, vector<int>(p)), B(p, vector<int>(m));
	for (int i=0; i<n; i++) for (int j=0; j<p; j++) scanf("%d", &A[i][j]),yhx(A[i][j]);
	for (int i=0; i<p; i++) for (int j=0; j<m; j++) scanf("%d", &B[i][j]),yhx(B[i][j]);
	Matrix ans = MatrixMul(A, B, n, p, m);
	for (int i=0; i<n; i++) {for (int j=0; j<m; j++) printf("%d ", ans[i][j]);puts("");}
	return 0;
}
posted @ 2018-07-23 15:20  MCH__ds  阅读(221)  评论(0编辑  收藏  举报