Saleh127

Light OJ 1070 / Mat Expo

Apr 12th, 2022 (edited)
245
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.17 KB | None | 0 0
  1. /***
  2.  created: 2022-04-12-21.13.43
  3. ***/
  4.  
  5. #include <bits/stdc++.h>
  6. using namespace std;
  7. #define ll long long
  8. #define ull unsigned long long
  9. #define test int tt; cin>>tt; for(int cs=1;cs<=tt;cs++)
  10. #define get_lost_idiot return 0
  11. #define nl '\n'
  12. #define row vector<ull>
  13. #define matrix vector<vector<ull>>
  14.  
  15. matrix operator*(const matrix& a, const matrix& b)
  16. {
  17.     ll r,c,p;
  18.  
  19.     r=a.size();
  20.     p=a[0].size();
  21.     assert(p==b.size());
  22.  
  23.     /// first matrix must have the same number of columns
  24.     ///as the second matrix has rows
  25.  
  26.     c=b[0].size();
  27.  
  28.     matrix ans(r,row(c,0));
  29.  
  30.     ll i,j,k;
  31.  
  32.     for(i=0; i<r; i++)
  33.     {
  34.         for(j=0; j<c; j++)
  35.         {
  36.             for(k=0; k<p; k++)
  37.             {
  38.                 ans[i][j]=(ans[i][j]+a[i][k]*b[k][j]);
  39.             }
  40.         }
  41.     }
  42.     return ans;
  43. }
  44.  
  45. matrix bigmod(matrix &a,ll p)
  46. {
  47.     if(p==1) return a;
  48.  
  49.     matrix x=bigmod(a,p/2);
  50.  
  51.     x=x*x;
  52.  
  53.     if(p&1) x=(x*a);
  54.  
  55.     return x;
  56. }
  57.  
  58.  
  59. int main()
  60. {
  61.     ios_base::sync_with_stdio(0);
  62.     cin.tie(0);
  63.     cout.tie(0);
  64.  
  65.     test
  66.     {
  67.         ll a,b,c,n,m,p,q;
  68.  
  69.         cin>>p>>q>>n;
  70.  
  71.         //p=a+b, q=ab;
  72.  
  73.         matrix base = {{p,-q},{1,0}};
  74.  
  75.         matrix statem = {{p},{2}};
  76.  
  77.         cout<<"Case "<<cs<<": ";
  78.  
  79.         if(n==0) cout<<2<<nl;
  80.         else if(n==1) cout<<p<<nl;
  81.         else
  82.         {
  83.             matrix ans=bigmod(base,n-1);
  84.  
  85.             ans=ans*statem;
  86.  
  87.             cout<<ans[0][0]<<nl;
  88.         }
  89.     }
  90.  
  91.     get_lost_idiot;
  92. }
  93.  
  94.  
  95. /*
  96.  
  97. Solution Idea:
  98. p = a + b, q = ab
  99.  
  100. (a ^ n + b ^)
  101.  
  102.  
  103. a ^ 2 + b ^ 2 = (a + b) * (a + b) -2 * a * b
  104.  
  105. a ^ 3 + b ^ 3 = (a ^ 2 + b ^ 2) * (a + b) -a * b (a + b)
  106.  
  107. a ^ 4 + b ^ 4 = (a ^ 3 + b ^ 3) * (a + b) -a * b (a ^ 2 + b ^ 2)
  108.  
  109. 1.a^n + b^n = (a^(n-1)+b^(n-1))*(a+b) - a*b*(a^(n-2)+b^(n-2))
  110.  
  111. 2.  Xn = a^n + b^n
  112.  
  113. 3 . Xn = pXn-1 + qXn-2
  114.  
  115.     (p q)      (Xn-1)         (pXn-1 + qXn-2)         (Xn  )
  116. 4.         x               =                      =
  117.     (1 0)      (Xn-2)         ( Xn-1 +  0  )          (Xn-1)
  118.  
  119. 5 . from this
  120.  
  121.     (p q)^(n-1)     (X1)     (Xn   )  
  122.                 x          =
  123.     (1 0)           (X0)     (Xn-1)
  124.  
  125. */
Add Comment
Please, Sign In to add comment