#include <bits/stdc++.h>
using namespace std;
int m;
int add (int a, int b) {
a += b; if (a >= m) a -= m;
return a;
}
int sub (int a, int b) {
a -= b; if (a < 0) a += m;
return a;
}
int mul (int a, int b) {
return (a * 1ll * b) % m;
}
int dp[2][5][5][5];
string s;
inline int get (int a, int b, int c, int d) {
if (d < 0 || d > 4) return 0;
if (b < 0 || b > 4) return 0;
if (c < 0 || c > 4) return 0;
return dp[a & 1][b][c][d];
}
int main () {
int n;
cin >> n >> m;
cin >> s;
vector <vector <int>> x;
int a = 2, b = 2, c = 2;
for (int i = 0; i < n; i++) {
if (s[i] == 'P') {
x.push_back({(int)s.length() - i - 1, min(c + 1, a), max(c + 1, b), c + 1});
c--; a = min(a, c); b = max(b, c);
} else {
c++; a = min(c, a); b = max(b, c);
}
}
int sum = 1;
for (int j = 0; j <= 2; j++) for (int k = 2; k <= min(4, j + 2); k++) for (int l = j; l <= k; l++) dp[0][j][k][l] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= 2; j++) { //low
for (int k = 2; k <= min(4, j + 2); k++) { //high
for (int l = j; l <= k; l++) {
int &ret = dp[i & 1][j][k][l];
ret = 0;
ret = add(ret, get(i - 1, min(j, l - 1), max(k, l - 1), l - 1));
ret = add(ret, get(i - 1, min(j, l + 1), max(k, l + 1), l + 1));
}
}
}
if (!x.empty() && x.back()[0] == i) {
sum = add(sum, get(i, x.back()[1], x.back()[2], x.back()[3]));
x.pop_back();
}
}
cout << sum << '\n';
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
344 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
344 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
1 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
344 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
344 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Incorrect |
0 ms |
348 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
348 KB |
Output is correct |
2 |
Correct |
0 ms |
348 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
536 KB |
Output is correct |
2 |
Correct |
1 ms |
600 KB |
Output is correct |
3 |
Correct |
1 ms |
348 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
1116 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
3 ms |
1084 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
7 ms |
2068 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
10 ms |
3092 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
36 ms |
12396 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
45 ms |
12904 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
59 ms |
15364 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
72 ms |
22720 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
115 ms |
29616 KB |
Output is correct |
2 |
Correct |
120 ms |
30132 KB |
Output is correct |
3 |
Incorrect |
101 ms |
29580 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |