Advertisement
jeff69

Untitled

Sep 17th, 2016
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.36 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. for(int k=0;k<n;k++)
  23. for(int j=0;j<n;j++)
  24. {
  25. ans.ar[i][k]+=a.ar[i][j]*b.ar[j][k];
  26. ans.ar[i][k]%=MD;
  27. }
  28. return ans;
  29. }
  30. matrix D;
  31. matrix solve(int x)
  32. {
  33. if(x==1)return D;
  34. matrix ret;
  35. ret= solve(x/2);
  36. ret=MMmult(ret,ret);
  37. if(x%2)ret=MMmult(ret,D);
  38. return ret;
  39.  
  40. }
  41. int main()
  42. {
  43. int t;
  44. cin>>t;
  45. initializer(D);
  46. int bb[3][3]= {{1,2,3},
  47. {4,5,6 },
  48. {7,8,9} };
  49. for(int i=0;i<3;i++)
  50. for(int k=0;k<3;k++)
  51. D.ar[i][k]=bb[i][k];
  52. while(t--)
  53. {
  54. int x;
  55. cin>>x;
  56. if(x==1)
  57. {
  58. cout<<3<<endl;
  59. continue;
  60. } ll sum=0;
  61. matrix v=solve(x-1);;
  62. for(int i=0;i<3;i++)
  63.  
  64. for(int k=0;k<3;k++)
  65. {
  66. sum+=v.ar[i][k];
  67. sum%=MD;
  68. }
  69. cout<<sum<<endl;
  70. }
  71. return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement