Advertisement
anoosykh95

Untitled

Jul 22nd, 2016
360
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long MOD=1000000009;
  4. const int MAXN = 300;
  5. typedef long long ll;
  6. struct matrix{
  7.     int n , m;
  8.     int arr[MAXN][MAXN];
  9.     matrix(){}
  10.     matrix(int x , int y , int V=0){
  11.         n = x; m = y;
  12.         for(int j=0;j<n;j++) for(int i=0;i<m;i++) arr[j][i] = V;
  13.     }
  14.     matrix(int x , int y , int A[MAXN][MAXN]){
  15.         n = x; m = y;
  16.         for(int j=0;j<n;j++) for(int i=0;i<m;i++) arr[j][i] = A[j][i];
  17.     }
  18.     matrix operator * (matrix &mat){
  19.         matrix res(n , mat.m , 0);
  20.         long long theta;
  21.         for(int j=0;j<n;j++){
  22.             for(int i=0;i<mat.m;i++){
  23.                 theta = 0;
  24.                 for(int k=0;k<m;k++){
  25.                     theta += 1ll * arr[j][k] * mat.arr[k][i];
  26.                     theta%=MOD;
  27.                 }
  28.                 res.arr[j][i] = theta;
  29.             }
  30.         }
  31.         return res;
  32.     }
  33.     matrix power(long long K){
  34.         matrix res(n , m , 0) , b(n , m , 0);
  35.         for(int j=0;j<n;j++) res.arr[j][j] = 1;
  36.         b = (*this);
  37.         while(K>0){
  38.             if( (K&1) )
  39.                 res = res * b;
  40.             K/=2;
  41.             b = b * b;
  42.         }
  43.         return res;
  44.     }
  45. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement