#include <bits/stdc++.h>
using namespace std;
const int N = 33;
int md;
int dp[2 * N][N][N][6][2][2];
int add(int x, int y) {
return x + y < md ? x + y : x + y - md;
}
void ckadd(int& x, int y) {
x = add(x, y);
}
int mul(int x, int y) {
return x * 1LL * y % md;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n >> md;
dp[0][0][0][2][0][0] = 1;
for (int pos = 1; pos <= 2 * n; pos++) {
for (int bal = 0; bal <= n; bal++) {
for (int bef = 0; bef <= n; bef++) {
for (int rd = 0; rd < 6; rd++) {
for (int o = 0; o < 2; o++) {
for (int b = 0; b < 2; b++) {
if (dp[pos - 1][bal][bef][rd][o][b] == 0) {
continue;
}
int open = bal;
int close = open - bal;
{
// take open bracket
int new_bal = bal + 1;
int new_bef = bef;
int new_rd = rd;
int new_o = 1;
int new_b = (o == 1 ? b : 0);
if (o == 0) {
new_rd--;
}
ckadd(dp[pos][new_bal][new_bef][new_rd][new_o][new_b], dp[pos - 1][bal][bef][rd][o][b]);
}
if (bal > 0) {
// take close bracket
if (o == 1) {
// match last bad greedy bracket
if (b == 1) {
int new_bal = bal - 1;
int new_bef = bef - 1;
int new_rd = rd;
int new_o = 0;
int new_b = 0;
ckadd(dp[pos][new_bal][new_bef][new_rd][new_o][new_b], dp[pos - 1][bal][bef][rd][o][b]);
} else {
int new_bal = bal - 1;
int new_bef = open - 1;
int new_rd = min(5, rd + 1);
int new_o = 0;
int new_b = 0;
ckadd(dp[pos][new_bal][new_bef][new_rd][new_o][new_b], dp[pos - 1][bal][bef][rd][o][b]);
}
}
// match with bracket that is not last bad greedy bracket
{
// match with bracket before last opt greedy
int new_bal = bal - 1;
int new_bef = bef - 1;
int new_rd = rd;
int new_o = o;
int new_b = b;
int ft = bef - (o == 1 && b == 1);
ckadd(dp[pos][new_bal][new_bef][new_rd][new_o][new_b], mul(dp[pos - 1][bal][bef][rd][o][b], ft));
}
{
// match with bracket after last opt greedy
int new_bal = bal - 1;
int new_bef = open - 1;
int new_rd = min(5, rd + 1);
int new_o = o;
int new_b = (o == 1 ? 1 : 0);
int ft = (open - bef) - (o == 1 && b == 0);
ckadd(dp[pos][new_bal][new_bef][new_rd][new_o][new_b], mul(dp[pos - 1][bal][bef][rd][o][b], ft));
}
}
}
}
}
}
}
}
int res = 0;
for (int bef = 0; bef <= n; bef++) {
for (int rd = 3; rd < 6; rd++) {
ckadd(res, dp[2 * n][0][bef][rd][0][0]);
}
}
cout << res << '\n';
return 0;
}
Compilation message
festival2.cpp: In function 'int main()':
festival2.cpp:38:19: warning: unused variable 'close' [-Wunused-variable]
38 | int close = open - bal;
| ^~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
600 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
600 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
604 KB |
Output is correct |
9 |
Correct |
0 ms |
716 KB |
Output is correct |
10 |
Correct |
1 ms |
604 KB |
Output is correct |
11 |
Correct |
0 ms |
472 KB |
Output is correct |
12 |
Correct |
0 ms |
604 KB |
Output is correct |
13 |
Correct |
0 ms |
608 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
600 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
604 KB |
Output is correct |
9 |
Correct |
0 ms |
716 KB |
Output is correct |
10 |
Correct |
1 ms |
604 KB |
Output is correct |
11 |
Correct |
0 ms |
472 KB |
Output is correct |
12 |
Correct |
0 ms |
604 KB |
Output is correct |
13 |
Correct |
0 ms |
608 KB |
Output is correct |
14 |
Correct |
1 ms |
1372 KB |
Output is correct |
15 |
Correct |
4 ms |
4268 KB |
Output is correct |
16 |
Correct |
4 ms |
3932 KB |
Output is correct |
17 |
Correct |
1 ms |
1632 KB |
Output is correct |
18 |
Correct |
1 ms |
1116 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
600 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
604 KB |
Output is correct |
9 |
Correct |
0 ms |
716 KB |
Output is correct |
10 |
Correct |
1 ms |
604 KB |
Output is correct |
11 |
Correct |
0 ms |
472 KB |
Output is correct |
12 |
Correct |
0 ms |
604 KB |
Output is correct |
13 |
Correct |
0 ms |
608 KB |
Output is correct |
14 |
Correct |
1 ms |
1372 KB |
Output is correct |
15 |
Correct |
4 ms |
4268 KB |
Output is correct |
16 |
Correct |
4 ms |
3932 KB |
Output is correct |
17 |
Correct |
1 ms |
1632 KB |
Output is correct |
18 |
Correct |
1 ms |
1116 KB |
Output is correct |
19 |
Runtime error |
418 ms |
13576 KB |
Execution killed with signal 11 |
20 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
600 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
604 KB |
Output is correct |
9 |
Correct |
0 ms |
716 KB |
Output is correct |
10 |
Correct |
1 ms |
604 KB |
Output is correct |
11 |
Correct |
0 ms |
472 KB |
Output is correct |
12 |
Correct |
0 ms |
604 KB |
Output is correct |
13 |
Correct |
0 ms |
608 KB |
Output is correct |
14 |
Correct |
1 ms |
1372 KB |
Output is correct |
15 |
Correct |
4 ms |
4268 KB |
Output is correct |
16 |
Correct |
4 ms |
3932 KB |
Output is correct |
17 |
Correct |
1 ms |
1632 KB |
Output is correct |
18 |
Correct |
1 ms |
1116 KB |
Output is correct |
19 |
Runtime error |
418 ms |
13576 KB |
Execution killed with signal 11 |
20 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
3 |
Correct |
0 ms |
348 KB |
Output is correct |
4 |
Correct |
0 ms |
348 KB |
Output is correct |
5 |
Correct |
0 ms |
348 KB |
Output is correct |
6 |
Correct |
0 ms |
600 KB |
Output is correct |
7 |
Correct |
0 ms |
348 KB |
Output is correct |
8 |
Correct |
1 ms |
604 KB |
Output is correct |
9 |
Correct |
0 ms |
716 KB |
Output is correct |
10 |
Correct |
1 ms |
604 KB |
Output is correct |
11 |
Correct |
0 ms |
472 KB |
Output is correct |
12 |
Correct |
0 ms |
604 KB |
Output is correct |
13 |
Correct |
0 ms |
608 KB |
Output is correct |
14 |
Correct |
1 ms |
1372 KB |
Output is correct |
15 |
Correct |
4 ms |
4268 KB |
Output is correct |
16 |
Correct |
4 ms |
3932 KB |
Output is correct |
17 |
Correct |
1 ms |
1632 KB |
Output is correct |
18 |
Correct |
1 ms |
1116 KB |
Output is correct |
19 |
Runtime error |
418 ms |
13576 KB |
Execution killed with signal 11 |
20 |
Halted |
0 ms |
0 KB |
- |