Advertisement
Guest User

Untitled

a guest
Mar 19th, 2021
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.05 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define mod 1000000000
  4. using namespace std;
  5. void solve();
  6. ll k;
  7. vector<ll> b, c;
  8.  
  9. vector<vector<ll>> multiply(vector<vector<ll>> A, vector<vector<ll>> B ){
  10. //logic to multiply matrix
  11. vector<vector<ll>> C(k+1, vector<ll>(k+1));
  12. for (int i = 1; i <= k; ++i)
  13. {
  14. for (int j = 1; j <= k; ++j)
  15. {
  16. for (int x = 1; x <= k; ++x)
  17. {
  18. C[i][j] = (C[i][j] + (A[i][x]*B[x][j])% mod) % mod;
  19. }
  20. }
  21. }
  22. return C;
  23. }
  24.  
  25. vector<vector<ll>> pow(vector<vector<ll>> A, ll n){
  26. if(n == 1)
  27. return A;
  28.  
  29. if(n&1)
  30. return multiply(A,pow(A, n-1 ));
  31. else
  32. return multiply(pow(A,n/2),pow(A, n/2));
  33. }
  34.  
  35. ll compute(ll n){
  36. // step 1
  37. // base case
  38. if(n == 0)
  39. return 0;
  40. if(n <= k)
  41. return b[n];
  42.  
  43. // initialise first part of vector i.e F1
  44. std::vector<ll> F1;
  45. for (int i = 1; i <= k; ++i)
  46. {
  47. F1[i] = b[i];
  48. }
  49.  
  50. // step 2
  51. // transform matrix
  52. vector<vector<ll>> trans(k+1, vector<ll>(k+1));
  53. for (int i = 1; i <= k; ++i)
  54. {
  55. for (int j = 1; j <= k; ++j)
  56. {
  57. if(i < k){
  58. if(i == j-1){
  59. trans[i][j] = 1;
  60. }
  61. else
  62. trans[i][j] = 0;
  63. }
  64. else
  65. trans[i][j] = c[k+1-j];
  66. }
  67. }
  68.  
  69. // step 3
  70. trans = pow(trans , n-1);
  71.  
  72. // step 4
  73. // matrix with a vector;
  74. ll res = 0;
  75. for (int i = 1; i <= k; ++i)
  76. {
  77. for (int j = 1; j <= k; ++j)
  78. {
  79. res = (res + (trans[i][j] * F1[j]) % mod) % mod;
  80. }
  81. }
  82. return res;
  83. }
  84. int main()
  85. {
  86. ios_base::sync_with_stdio(false);cin.tie(NULL);
  87.  
  88. #ifndef ONLINE_JUDGE
  89. freopen("input.txt", "r", stdin);
  90. freopen("error.txt", "w", stderr);
  91. freopen("output.txt", "w", stdout);
  92. #endif
  93.  
  94. int t=1;
  95. /*is Single Test case?*/cin>>t;
  96. while(t--)
  97. {
  98. solve();
  99. cout<<"\n";
  100. }
  101.  
  102. cerr<<"time taken : "<<(float)clock()/CLOCKS_PER_SEC<<" secs"<<endl;
  103. return 0;
  104. }
  105. void solve()
  106. {
  107. ll k; cin>>k;
  108. for (int i = 1; i <= k; ++i)
  109. {
  110. ll temp; cin>>temp;
  111. b.push_back(temp);
  112. }
  113. for (int i = 1; i <= k; ++i)
  114. {
  115. ll temp; cin>>temp;
  116. c.push_back(temp);
  117. }
  118.  
  119. ll n; cin>>n;
  120. cout<<compute(n);
  121. }
  122.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement