Advertisement
Dang_Quan_10_Tin

HOÁN VỊ ĐẸP

Jul 26th, 2022
1,097
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using ll = long long;
  5. using ld = long double;
  6. using ull = unsigned long long;
  7.  
  8. template <class T>
  9. void read(T &x)
  10. {
  11.     x = 0;
  12.     register int c;
  13.     while ((c = getchar()) && (c > '9' || c < '0'))
  14.         ;
  15.     for (; c >= '0' && c <= '9'; c = getchar())
  16.         x = x * 10 + c - '0';
  17. }
  18. constexpr bool typetest = 0;
  19. constexpr int N = 1e2 + 5;
  20. constexpr int mod = 1e9;
  21. int n, m;
  22.  
  23. int dp[N][9000];
  24.  
  25. void Solve();
  26.  
  27. void Read()
  28. {
  29.     while (cin >> n >> m)
  30.         Solve();
  31. }
  32.  
  33. #define bit(i, x) (((x) >> (i)) & 1)
  34.  
  35. void Solve()
  36. {
  37.     memset(dp, 0, sizeof dp);
  38.     dp[0][0] = 1;
  39.  
  40.     int k = m * 2 + 1;
  41.  
  42.     for (int i = 0; i < n; ++i)
  43.         for (int j = 0; j < (1 << k); ++j)
  44.             if (dp[i][j])
  45.             {
  46.                 for (int t = max(0, i - m); t < n && t <= i + m; ++t)
  47.                 {
  48.                     // bit h cua x la so thu t = i - m + h => h = t + m - i
  49.  
  50.                     // assert(t + m - i < k && t + m - i >= 0);
  51.  
  52.                     int mask = j;
  53.  
  54.                     if (!bit(t + m - i, mask))
  55.                     {
  56.                         mask |= 1 << (t + m - i);
  57.                         if (i < m || bit(0, mask))
  58.                             (dp[i + 1][mask >> 1] += dp[i][j]) %= mod;
  59.                     }
  60.                 }
  61.             }
  62.  
  63.     cout << dp[n][(1 << m) - 1] << "\n";
  64. }
  65.  
  66. int32_t main()
  67. {
  68.     ios::sync_with_stdio(0);
  69.     cin.tie(0);
  70.     cout.tie(0);
  71.     if (fopen("tests.inp", "r"))
  72.     {
  73.         freopen("test.inp", "r", stdin);
  74.         freopen("test.out", "w", stdout);
  75.     }
  76.  
  77.     int t(1);
  78.     if (typetest)
  79.         cin >> t;
  80.     for (int _ = 1; _ <= t; ++_)
  81.     {
  82.         // cout << "Case #" << _ << ": ";
  83.         Read();
  84.         // Solve();
  85.     }
  86.     // //cerr << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
  87. }
  88.  
  89. /*
  90. 1
  91. 3
  92. 1 0
  93. 1 1 2
  94. 0 3 4
  95. */
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement