比赛 矩阵乘法练习赛 评测结果 WWTTTTTTTT
题目名称 矩阵幂之和 最终得分 0
用户昵称 对立猫猫对立 运行时间 23.620 s
代码语言 C++ 内存使用 3.45 MiB
提交时间 2025-04-28 20:45:05
显示代码纯文本
#include <bits/stdc++.h>
#define ll long long
#define fu_xuan return 0;
using namespace std;
ll N, M, k;
struct Matrix {
	int a[101][101], n, m;
	void clear() {
		n = m = 0;
		memset(a, 0, sizeof(a));
	}
	Matrix operator * (const Matrix &x)const {
		Matrix y;
		y.clear();
		y.n = n;
		y.m = m;
		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= m; j++)
				for (int k = 1; k <= m; k++)
					y.a[i][j] = y.a[i][j] + a[i][k] * x.a[k][j];
		return y;
	}
	Matrix operator + (const Matrix &x)const {
		Matrix y;
		y.clear();
		y.n = n;
		y.m = m;
		for (int i = 1; i <= n; i++)
			for (int j = 1; j <= m; j++)
				y.a[i][j] = y.a[i][j] + x.a[i][j];
		return y;
	}
} c;
int main() {
	freopen("matrix_sum.in", "r", stdin);
	freopen("matrix_sum.out", "w", stdout);
	scanf("%lld %lld %lld", &N, &k, &M);
	Matrix aa, ans;
	aa.clear();
	aa.n = N;
	aa.m = N;
	ans.clear();
	ans.n = N;
	ans.m = N;
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			cin >> aa.a[i][j];
		}
	}
	ans = ans + aa;
	Matrix t = aa;
	for (int i = 2; i <= k+1; i++) {
		aa = aa * t;
		ans = ans + aa;
	}
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++) {
			cout << ans.a[i][j] << " ";
		}
		cout << endl;
	}
	fu_xuan
}