Advertisement
clown1337

Untitled

May 20th, 2024
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.24 KB | None | 0 0
  1. #ifdef ONPC
  2. #define _GLIBCXX_DEBUG
  3. #endif
  4. #include <bits/stdc++.h>
  5.  
  6. using namespace std;
  7. /// Pragmas ///
  8. /// define ///
  9. #define pii pair<int, int>
  10. #define pll pair<ll, ll>
  11. #define V vector
  12. #define MP make_pair
  13. #define vi vector<int>
  14. #define ff first
  15. #define ss second
  16. #define vl vector<long long>
  17. /// typedef ///
  18. typedef long long ll;
  19. typedef long double ld;
  20. typedef unsigned long long ull;
  21. #define int long long
  22.  
  23. /// solve ///
  24.  
  25. const int MOD = 1000000007;
  26. int n = 3;
  27.  
  28. int get(int mask, int i) { return (mask >> i) & 1; }
  29.  
  30. bool check(int mask1, int mask2) {
  31.   int cnt = 0;
  32.   for (int i = 0; i < n; i++) {
  33.     if (get(mask1, i) == 0 && get(mask2, i) != 1) {
  34.       return false;
  35.     } else {
  36.       if (get(mask1, i) == 1 && get(mask2, i) == 1) {
  37.         cnt++;
  38.       } else {
  39.         if (cnt % 2 != 0) {
  40.           return false;
  41.         } else {
  42.           cnt = 0;
  43.         }
  44.       }
  45.     }
  46.   }
  47.   if (cnt % 2 != 0) {
  48.     return false;
  49.   } else {
  50.     return true;
  51.   }
  52. }
  53.  
  54. void solve() {
  55.   int m;
  56.   cin >> m;
  57.   vector<vector<int>> dp(m + 1, vector<int>((1 << n), 0));
  58.   vector<vector<int>> d((1 << n), vector<int>((1 << n), 0));
  59.   dp[0][(1 << n) - 1] = 1;
  60.   for (int p = 0; p < (1 << n); p++) {
  61.     for (int q = 0; q < (1 << n); q++) {
  62.       if (check(p, q)) {
  63.         d[p][q] = 1;
  64.         if (p == 0 && q == (1 << n) - 1) {
  65.           d[p][q] = 3;
  66.         }
  67.       }
  68.     }
  69.   }
  70.   for (int i = 0; i < m; i++) {
  71.     for (int p = 0; p < (1 << n); p++) {
  72.       for (int q = 0; q < (1 << n); q++) {
  73.         dp[i + 1][q] += (dp[i][p] * d[p][q]) % MOD;
  74.         dp[i + 1][q] %= MOD;
  75.       }
  76.     }
  77.   }
  78.   cout << dp[m][(1 << n) - 1] % MOD << '\n';
  79. }
  80.  
  81. signed main() {
  82.   ios_base::sync_with_stdio(false);
  83.   cin.tie(NULL);
  84.   cout.tie(NULL);
  85.   freopen("input.txt", "r", stdin);
  86.   freopen("output.txt", "w", stdout);
  87.   int t = 1;
  88.   // cin >> t;
  89. #ifdef ONPC
  90.   std::cout << std::unitbuf;
  91. #endif
  92.   while (t--)
  93.     solve();
  94. #ifdef ONPC
  95.   cout << endl << "__________________________" << endl;
  96. #endif
  97. #ifdef ONPC
  98.   cout << endl
  99.        << "finished in " << clock() * 1.0 / CLOCKS_PER_SEC << " sec" << endl;
  100.   cerr << endl
  101.        << "finished in " << clock() * 1.0 / CLOCKS_PER_SEC << " sec" << endl;
  102. #endif
  103.   return 0;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement