@[Birdly](/user/620253) 帮你改了一下过了:
```cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 110;
const ll mod = 1e9 + 7;
struct Matrix {
ll M[MAXN][MAXN];
Matrix() {memset(M,0,sizeof M);}
}A, I;
ll n, k;
ll read(){
ll x = 0, f = 1; char c = getchar();
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
Matrix operator *(const Matrix &X, const Matrix &Y){
Matrix Z;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
for(int h = 1; h <= n; h++)
Z.M[i][j] += X.M[i][h] % mod * Y.M[h][j] % mod, Z.M[i][j] %= mod;
Z.M[i][j] %= mod;
}
}
return Z;
}
Matrix qpow(Matrix X, ll k){
Matrix Y = I;
while(k){
if(k & 1){
Y = Y * X;
}
X = X * X;
k >>= 1;
}
return Y;
}
int main() {
cin >> n >> k;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(i == j) I.M[i][j] = 1;
else I.M[i][j] = 0;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
A.M[i][j] = read(), A.M[i][j] %= mod;
Matrix B = qpow(A, k);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++)
cout << B.M[i][j] % mod << ' ';
cout << endl;
}
return 0;
}
//2 2
//1 1
//1 1
```
by 宇智波Ban @ 2024-02-07 19:48:27
@[宇智波Ban](/user/1073459) 原来是没初始化啊...谢谢大佬QWQ
by Birdly @ 2024-02-07 19:50:32
@[Birdly](/user/620253) 不谢,但是你这个板子有一个问题,就是假如要做一个矩阵快速幂的题。
初始矩阵:$n$ 行 $1$ 列。
转移矩阵:$n$ 行 $n$ 列。
你这个就不好弄
by 宇智波Ban @ 2024-02-07 19:53:24
@[宇智波Ban](/user/1073459) 好的,谢谢大佬,我应当把两个矩阵的行列作为参数传进来,这样更好对吧?
by Birdly @ 2024-02-07 19:54:59
对的
by 宇智波Ban @ 2024-02-07 19:55:24
@[宇智波Ban](/user/1073459) thx
by Birdly @ 2024-02-07 19:57:05
@[Birdly](/user/620253) 其实没什么问题 你都扩成n*n 别的位置都空着就行
by ___A__ @ 2024-02-07 20:25:59