比赛 |
矩阵乘法练习赛 |
评测结果 |
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
}