ZhongJiaXuan

P3390 【模板】矩阵快速幂

Dec 15th, 2023
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 KB | Source Code | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int T = 1e9 + 7;
  4. long long n, k;
  5. struct node {
  6.     long long a[110][110];
  7.     node() { memset(a, 0, sizeof(a)); }
  8.     void build() {
  9.         for (int i = 1; i <= n; i++) a[i][i] = 1;
  10.     }
  11. } b;
  12. node operator*(const node& x, const node& y) {
  13.     node z;
  14.     for (int i = 1; i <= n; i++)
  15.         for (int j = 1; j <= n; j++) {
  16.             for (int k = 1; k <= n; k++) z.a[i][j] = (z.a[i][j] + x.a[i][k] * y.a[k][j] % T) % T;
  17.         }
  18.     return z;
  19. }
  20. int main() {
  21.     cin >> n >> k;
  22.     for (int i = 1; i <= n; i++)
  23.         for (int j = 1; j <= n; j++)
  24.             cin >> b.a[i][j];
  25.     node ans;
  26.     ans.build();
  27.     while (k) {
  28.         if (k & 1) ans = ans * b;
  29.         b = b * b;
  30.         k = k >> 1;
  31.     }
  32.     for (int i = 1; i <= n; i++) {
  33.         for (int j = 1; j <= n; j++) cout << ans.a[i][j] << " ";
  34.         cout << endl;
  35.     }
  36. }
Advertisement
Add Comment
Please, Sign In to add comment