Advertisement
Guest User

Untitled

a guest
Apr 18th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <algorithm>
  4. #include <set>
  5. #include <map>
  6. #include <vector>
  7. #include <string>
  8. #include <queue>
  9.  
  10. using namespace std;
  11. const int N = 1000 + 12;
  12. const int mod = 998244353;
  13.  
  14. int d[N][2 * N][5];
  15. int n, k;
  16.  
  17. inline void read() {
  18.     cin >> n >> k;
  19. }
  20.  
  21. int getCnt(int mask, int nmask) {
  22.     if (nmask == mask) {
  23.         return 0;
  24.     }
  25.     if (mask == 0 && nmask == 1) {
  26.         return 0;
  27.     } else if (mask == 1 && nmask == 0) {
  28.         return 1;
  29.     } else if (mask == 0 && nmask == 2) {
  30.         return 0;
  31.     } else if (mask == 2 && nmask == 0) {
  32.         return 1;
  33.     } else if (mask == 0 && nmask == 3) {
  34.         return 1;
  35.     } else if (mask == 3 && nmask == 0) {
  36.         return 1;
  37.     } else if (mask == 1 && nmask == 2) {
  38.         return 2;
  39.     } else if (mask == 2 && nmask == 1) {
  40.         return 2;
  41.     } else if (mask == 1 && nmask == 3) {
  42.         return 1;
  43.     } else if (mask == 3 && nmask == 1) {
  44.         return 0;
  45.     } else if (mask == 2 && nmask == 3) {
  46.         return 1;
  47.     } else if (mask == 3 && nmask == 2) {
  48.         return 0;
  49.     }
  50. }
  51.  
  52. inline void solve() {
  53.     d[0][0][0] = 1;
  54.     d[0][0][1] = 1;
  55.     d[0][0][2] = 1;
  56.     d[0][0][3] = 1;
  57.    
  58.     for (int i = 0; i < n; i++) {
  59.         for (int j = 0; j <= 2 * i; j++) {
  60.             for (int mask = 0; mask < 4; mask++) {
  61.                 for (int nmask = 0; nmask < 4; nmask++) {
  62.                     d[i + 1][j + getCnt(mask, nmask)][nmask] += d[i][j][mask];
  63.                     d[i + 1][j + getCnt(mask, nmask)][nmask] %= mod;
  64.                 }
  65.             }
  66.         }
  67.     }
  68.    
  69.     int ans = 0;
  70.     for (int mask = 0; mask < 4; mask++) {
  71.         if (mask == 0 || mask == 3) {
  72.             ans += d[n][k - 1][mask];
  73.         } else if (k > 1) {
  74.             ans += d[n][k - 2][mask];
  75.         }
  76.     }
  77.    
  78.     ans %= mod;
  79.     cout << ans << endl;
  80. }
  81.  
  82. int main() {
  83.     read();  
  84.     solve();
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement