Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <algorithm>
- #include <set>
- #include <map>
- #include <vector>
- #include <string>
- #include <queue>
- using namespace std;
- const int N = 1000 + 12;
- const int mod = 998244353;
- int d[N][2 * N][5];
- int n, k;
- inline void read() {
- cin >> n >> k;
- }
- int getCnt(int mask, int nmask) {
- if (nmask == mask) {
- return 0;
- }
- if (mask == 0 && nmask == 1) {
- return 0;
- } else if (mask == 1 && nmask == 0) {
- return 1;
- } else if (mask == 0 && nmask == 2) {
- return 0;
- } else if (mask == 2 && nmask == 0) {
- return 1;
- } else if (mask == 0 && nmask == 3) {
- return 1;
- } else if (mask == 3 && nmask == 0) {
- return 1;
- } else if (mask == 1 && nmask == 2) {
- return 2;
- } else if (mask == 2 && nmask == 1) {
- return 2;
- } else if (mask == 1 && nmask == 3) {
- return 1;
- } else if (mask == 3 && nmask == 1) {
- return 0;
- } else if (mask == 2 && nmask == 3) {
- return 1;
- } else if (mask == 3 && nmask == 2) {
- return 0;
- }
- }
- inline void solve() {
- d[0][0][0] = 1;
- d[0][0][1] = 1;
- d[0][0][2] = 1;
- d[0][0][3] = 1;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j <= 2 * i; j++) {
- for (int mask = 0; mask < 4; mask++) {
- for (int nmask = 0; nmask < 4; nmask++) {
- d[i + 1][j + getCnt(mask, nmask)][nmask] += d[i][j][mask];
- d[i + 1][j + getCnt(mask, nmask)][nmask] %= mod;
- }
- }
- }
- }
- int ans = 0;
- for (int mask = 0; mask < 4; mask++) {
- if (mask == 0 || mask == 3) {
- ans += d[n][k - 1][mask];
- } else if (k > 1) {
- ans += d[n][k - 2][mask];
- }
- }
- ans %= mod;
- cout << ans << endl;
- }
- int main() {
- read();
- solve();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement