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 <iostream>
#include <vector>
#include <cassert>
#include <cmath>
using ll = long long;
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) < (b)) ? (b) : (a))
int const nmax = 1000000;
int dp[3][3][5][2];
int dp2[3][3][5][2];
int main() {
int n, modulo;
std::cin >> n >> modulo;
std::string s;
std::cin >> s;
s = "#" + s;
int result = 0;
dp[0][0][2][0] = 1;
for(int i = 1;i <= n; i++) {
int val = 0;
if(s[i] == 'P')
val = 1;
for(int smin = 0; smin <= 2; smin++)
for(int smax = 0; smax <= 2 - smin; smax++)
for(int curr = 2 - smin; curr <= 2 + smax; curr++)
for(int h = 0; h < 2; h++) {
for(int h2 = 0; h2 < 2 && (h == 1 || h2 <= val); h2++) {
int smax2 = smax;
int smin2 = smin;
int curr2 = curr + h2 * 2 - 1;
smin2 = std::max(smin2, -(curr2 - 2));
smax2 = std::max(smax2, curr2 - 2);
if(smin2 + smax2 <= 2) {
dp2[smin2][smax2][curr2][h | (h2 < val)] += dp[smin][smax][curr][h];
if(modulo <= dp2[smin2][smax2][curr2][h | (h2 < val)])
dp2[smin2][smax2][curr2][h | (h2 < val)] -= modulo;
}
}
}
for(int smin = 0; smin <= 2; smin++)
for(int smax = 0; smax <= 2 - smin; smax++)
for(int curr = 2 - smin; curr <= 2 + smax; curr++) {
for(int h = 0; h < 2; h++) {
dp[smin][smax][curr][h] = dp2[smin][smax][curr][h];
dp2[smin][smax][curr][h] = 0;
if(i == n && h == 1) {
result += dp[smin][smax][curr][h];
if(modulo <= result)
result -= modulo;
}
}
}
}
std::cout << (result + 1) % modulo;
return 0;
}
# | 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... |