Advertisement
jeff69

Matrix Power

Oct 21st, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.46 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. typedef long long ll;
  3. using namespace std;
  4.  ll MOD=1000000007;
  5.  struct matrix
  6.  {
  7.     ll ar[3][3];
  8.  };
  9.  int n=3;
  10.  const int MD=1e9+7;
  11.  void initializer( matrix &a)
  12.  {
  13.      for(int i=0;i<n;i++)
  14.          for(int k=0;k<n;k++)
  15.             a.ar[i][k]=0;
  16.  }
  17.  matrix MMmult(matrix &a, matrix &b)
  18.  {
  19.      matrix ans;
  20.      initializer(ans);
  21.      for(int i=0;i<n;i++)
  22.      {
  23.          for(int k=0;k<n;k++)
  24.          {
  25.              for(int j=0;j<n;j++)
  26.              {
  27.                  ans.ar[i][k]+=a.ar[i][j]*b.ar[j][k];
  28.                  ans.ar[i][k]%=MD;
  29.              }
  30.          }
  31.      }
  32.      return ans;
  33.  }
  34.  matrix D;
  35.  matrix solve(int x)
  36.  {
  37.      if(x==1)return D;
  38.    matrix ret;
  39.  
  40.    ret= solve(x/2);
  41.    ret=MMmult(ret,ret);
  42.    if(x%2)ret=MMmult(ret,D);
  43.    return ret;
  44.  
  45.  }
  46.  int main()
  47.  {
  48.  
  49.  int t;
  50.  cin>>t;
  51.              initializer(D);
  52.     int bb[3][3]= {{1,2,3},
  53.     {4,5,6 },
  54.        {7,8,9} };
  55.      for(int i=0;i<3;i++)
  56.      {
  57.          for(int k=0;k<3;k++)
  58.          {
  59.              D.ar[i][k]=bb[i][k];
  60.          }
  61.      }
  62.     while(t--)
  63.     {
  64.  
  65.     int x;
  66.     cin>>x;
  67.     if(x==1)
  68.     {
  69.         cout<<3<<endl;
  70.         continue;
  71.     }   ll sum=0;
  72.          matrix v=solve(x-1);;
  73.         for(int i=0;i<3;i++)
  74.         {
  75.  
  76.             for(int k=0;k<3;k++)
  77.             {
  78.                 sum+=v.ar[i][k];
  79.                 sum%=MD;
  80.             }
  81.  
  82.         }
  83.             cout<<sum<<endl;
  84.     }
  85.  
  86.  
  87.      return 0;
  88.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement