Advertisement
_no0B

Untitled

Nov 7th, 2021
676
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define MAX ((int)1e9 + 5)
  3. #define N ((int)1e6 + 5)
  4. #define fastio ios_base::sync_with_stdio(false),cin.tie(NULL)
  5. using namespace std;
  6.  
  7.  
  8. vector < vector < int > > matMultiply(vector < vector < int > >& matA , vector < vector < int > >& matB, int mod)
  9. {
  10.     int row = matA.size() , col = matB[0].size() , mid = matB.size();
  11.     vector < vector < int > > ans(row , vector < int >(col,0));
  12.     for(int i = 0 ; i < row ; i++){
  13.         for(int j = 0 ; j < col ; j++){
  14.             int val = 0;
  15.             for(int k = 0 ; k < mid ; k++) val = (val + matA[i][k] * matB[k][j]) % mod;
  16.             ans[i][j] = val;
  17.         }
  18.     }
  19.     return ans;
  20. }
  21.  
  22. vector < vector < int > > bigMod(vector < vector < int > >& mat, int p , int mod)
  23. {
  24.     if(p == 0){
  25.         int row = mat.size();
  26.         vector < vector < int > > ans(row, vector < int >(row,0));
  27.         ans[0][0] = ans[1][1] = 1;
  28.         return ans;
  29.     }
  30.     vector < vector < int > > ans = bigMod(mat , p>>1 , mod);
  31.     ans = matMultiply(ans , ans, mod);
  32.     if(p & 1) ans = matMultiply(ans , mat, mod);
  33.     return ans;
  34. }
  35.  
  36.  
  37. int main()
  38. {
  39.     /// problem: https://lightoj.com/problem/number-sequence
  40.     fastio;
  41.     int t , caseNo = 1;
  42.     cin>>t;
  43.  
  44.     while(t--){
  45.         int a , b , n , m;
  46.         cin>>a>>b>>n>>m;
  47.         vector < vector < int > > mat(2,vector < int >(2,1)) , col(2,vector < int >(1,0));
  48.         col[0][0] = b;
  49.         col[1][0] = a;
  50.         mat[1][1] = 0;
  51.         int mod = 1;
  52.         while(m--) mod *= 10;
  53.         mat = bigMod(mat,n-1,mod);
  54.         vector < vector < int > > ans = matMultiply(mat , col, mod);
  55.         cout<<"Case "<<caseNo++<<": "<<ans[0][0]<<endl;
  56.     }
  57.     return 0;
  58. }
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement