板子求调!!

P3390 【模板】矩阵快速幂

@[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


|