ahmrf

Untitled

Nov 6th, 2015
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. #include <bits/stdtr1c++.h>
  2.  
  3. using namespace std;
  4.  
  5. int MOD = 1000000007;
  6.  
  7. struct Matrix {
  8.     int r, c;
  9.     int **mat;
  10.  
  11.     Matrix(int _r, int _c) {
  12.         r = _r;
  13.         c = _c;
  14.         mat = new int*[r];
  15.         for(int i = 0; i < r; i++) {
  16.             mat[i] = new int[c];
  17.         }
  18.     }
  19.  
  20.     int get_row() { return r; }
  21.     int get_column() { return c; }
  22.  
  23.     Matrix multiply(Matrix A) {
  24.         int col = A.get_column();
  25.         Matrix C(r, col);
  26.        
  27.         for(int i = 0; i < r; i++) {
  28.             for(int j = 0; j < col; j++) {
  29.                 C.mat[i][j] = 0;
  30.                 for(int k = 0; k < r; k++) {
  31.                     C.mat[i][j] += (mat[i][k] * A.mat[k][j]) % MOD;;
  32.                 }  
  33.             }
  34.         }
  35.         return C;
  36.     }
  37.  
  38.     void display() {
  39.         for(int i = 0; i < r; i++) {
  40.             for(int j = 0; j < c; j++) {
  41.                 cout << mat[i][j] << ' ';
  42.             }
  43.             puts("");
  44.         }
  45.     }
  46. };
  47.  
  48. Matrix F(Matrix A, int n) {
  49.     if(n == 1) return A;
  50.     if(n % 2 == 0) return F(A.multiply(A), n >> 1);
  51.     return A.multiply(F(A.multiply(A), n >> 1));
  52. }
  53.  
  54. int main() {
  55.     Matrix A(2, 2);
  56.     A.mat[0][0] = 0;
  57.     A.mat[0][1] = 1;
  58.     A.mat[1][0] = 1;
  59.     A.mat[1][1] = 1;
  60.     int a, b, ans, mod, T, t = 1, n;
  61.     scanf("%d", &T);
  62.     while(T--) {
  63.         scanf("%d %d %d %d", &a, &b, &n, &mod);
  64.         Matrix B(2, 1);
  65.         B.mat[0][0] = a;
  66.         B.mat[1][0] = b;
  67.         MOD = (int) pow(10, mod);
  68.         printf("Case %d: ", t++);
  69.         if(n == 0) {
  70.             printf("%d\n", a);
  71.         } else if(n == 1) {
  72.             printf("%d\n", b);
  73.         }else {
  74.             Matrix C = F(A, n);
  75.             ans = C.multiply(B).mat[0][0];
  76.             printf("%d\n", ans);
  77.         }
  78.     }
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment