This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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;
int sum = 1;
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);
}
}
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 = 0; i <= n; i++) {
if (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 |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |