MinhNGUYEN2k4

Untitled

Nov 11th, 2021
602
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. struct Matrix{
  2.     int val[N][N];
  3.  
  4.     Matrix(){
  5.         memset(val, 0, sizeof(val));
  6.     }
  7.  
  8.     friend Matrix operator * (const Matrix &A, const Matrix &B){
  9.         Matrix C;
  10.         for (int i = 1; i <= n; ++i){
  11.             for (int j = 1; j <= n; ++j){
  12.                 for (int k = 1; k <= n; ++k){
  13.                     (C.val[i][j] += A.val[i][k] * B.val[k][j] % MOD);
  14.                     if (C.val[i][j] >= MOD) C.val[i][j] -= MOD;
  15.                 }
  16.             }
  17.         }
  18.         return C;
  19.     }
  20.  
  21.     friend Matrix Pow(Matrix A, int nn){
  22.         Matrix B;
  23.         for (int i = 1; i <= n; ++i) B.val[i][i] = 1;
  24.         while (nn > 0){
  25.             if (nn & 1) B = B * A;
  26.             A = A * A;
  27.             nn >>= 1;
  28.         }
  29.         return B;
  30.     }
  31.  
  32.     friend Matrix Pow(Matrix A, string s){
  33.         Matrix B[10];
  34.         Matrix C;
  35.         for (int i = 1; i <= n; ++i) B[0].val[i][i] = C.val[i][i] = 1;
  36.         for (int i = 1; i < 10; ++i) B[i] = B[i-1] * A;
  37.         for (int i = 0; i < s.size(); ++i){
  38.             C = Pow(C, 10);
  39.             C = C * B[s[i] - '0'];
  40.         }
  41.         return C;
  42.     }
  43.  
  44. };
Advertisement
Add Comment
Please, Sign In to add comment