Advertisement
splash365

Untitled

Oct 16th, 2020
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.44 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define     rep(i,k,n)      for(long long int i=k;i<n;i++)
  5. #define     fast            ios_base::sync_with_stdio(false);cin.tie(NULL)
  6. #define     read            freopen("input.txt","r",stdin)
  7. #define     write           freopen("output.txt","w",stdout)
  8. #define     DBG(x)          cout << '>' << #x << ':' << x << endl
  9. #define     PI              acos(-1)
  10. #define     MP(x, y)        make_pair(x, y)
  11. #define     PB(x)           push_back(x)
  12. #define     ALL(p)          p.begin(),p.end()
  13. #define     CLR(p)          memset(p, 0, sizeof(p))
  14. #define     MEM(a, b)       memset(a, (b), sizeof(a))
  15. #define     ff              first
  16. #define     ss              second
  17. #define     sf              scanf
  18. #define     pf              printf
  19. #define     PII             pair<int, int>
  20. #define     ll              long long int
  21. #define     ull             unsigned long long int
  22.  
  23. inline int two(int n) { return 1 << n; }
  24. inline int test(int n, int b) { return (n>>b)&1; }
  25. inline void set_bit(int & n, int b) { n |= two(b); }
  26. inline void unset_bit(int & n, int b) { n &= ~two(b); }
  27. inline int last_bit(int n) { return n & (-n); }
  28. inline int ones(int n) { int res = 0; while(n && ++res) n-=n&(-n); return res; }
  29.  
  30.  
  31.  
  32. void MatrixMul(ll a[2][2], ll b[2][2], ll M)
  33. {
  34.     int a00 = ((a[0][0]*b[0][0]) + (a[0][1]*b[1][0]))%M;
  35.     int a01 = ((a[0][0]*b[0][1]) + (a[0][1]*b[1][1]))%M;
  36.     int a10 = ((a[1][0]*b[0][0]) + (a[1][1]*b[1][0]))%M;
  37.     int a11 = ((a[1][0]*b[0][1]) + (a[1][1]*b[1][1]))%M;
  38.     a[0][0] = a00;
  39.     a[0][1] = a01;
  40.     a[1][0] = a10;
  41.     a[1][1] = a11;
  42. }
  43.  
  44. void MatPower(ll a[2][2], ll n, ll mod)
  45. {
  46.     if(n==0 || n==1) return;
  47.     ll temp[2][2] = {{1,1},{1,0}};
  48.     MatPower(a,n/2,mod);
  49.     if(n%2==0) MatrixMul(a,a,mod);
  50.     else
  51.     {
  52.         MatrixMul(a,a,mod);
  53.         MatrixMul(a,temp,mod);
  54.     }
  55. }
  56.  
  57. ll power(ll a, ll n)
  58. {
  59.     if(n==0) return 1;
  60.     else if(n==1) return a;
  61.     else
  62.     {
  63.         ll R = power(a,n/2);
  64.         if(n%2==0) return R*R;
  65.         else return R*a*R;
  66.     }
  67.    
  68. }
  69.  
  70. int main()
  71. {
  72.     fast;
  73.     //read; write;
  74.     ll t;
  75.     cin>>t;
  76.     rep(tc,1,t+1)
  77.     {
  78.         ll a,b,n,m;
  79.         cin>>a>>b>>n>>m;
  80.         ll fib[2][2] = {{1,1},{1,0}};
  81.         ll mod = power(10,m);
  82.         //DBG(mod);
  83.         MatPower(fib,n-1,mod);
  84.         ll ans = fib[0][0]*b + fib[0][1]*a;
  85.         cout<<"Case "<<tc<<": "<< ans%mod <<endl;
  86.     }
  87.     return 0;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement