Advertisement
Hezov

String mood (DP in O(LogN) )

Jun 16th, 2024
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.09 KB | Source Code | 0 0
  1. //String Mood - problema cu exponentierea matricii
  2. #include <iostream>
  3. using namespace std;
  4. const long long MOD = 1e9 + 7;
  5. long long sol_HH = 1, sol_HS = 0;
  6. long long c_HH = 19, c_HS = 7, c_SH = 6 , c_SS = 20;
  7. void update_sol()
  8. {
  9.     long long a = ((sol_HH * c_HH) % MOD + (sol_HS * c_SH) % MOD) % MOD;  ///HAPPY - HAPPY
  10.     long long b = ((sol_HH  * c_HS) % MOD + (sol_HS * c_SS) % MOD) % MOD;  ///HAPPY - SAD
  11.     sol_HH = a;
  12.     sol_HS = b;
  13. }
  14.  
  15. void update_current()
  16. {
  17.     long long a = ((c_HH * c_HH) % MOD + (c_HS * c_SH) % MOD ) % MOD; /// HAPPY - HAPPY
  18.     long long b = ((c_HH * c_HS) % MOD + (c_HS * c_SS) % MOD ) % MOD; /// HAPPY - SAD
  19.     long long c = ((c_SH * c_HH) % MOD + (c_SS * c_SH) % MOD ) % MOD; /// SAD -  HAPPY
  20.     long long d = ((c_SH * c_HS) % MOD + (c_SS * c_SS) % MOD ) % MOD;  /// SAD - SAD
  21.     c_HH = a;
  22.     c_HS = b;
  23.     c_SH = c;
  24.     c_SS = d;
  25. }
  26.  
  27. int main()
  28. {
  29.     unsigned long long n ;
  30.     cin>>n;
  31.     while(n!=0)
  32.     {
  33.         if(n%2==1)
  34.             update_sol();
  35.  
  36.         update_current();
  37.  
  38.         n/=2;
  39.     }
  40.     cout<<sol_HH;
  41.     return 0;
  42. }
  43.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement