#include <bits/stdc++.h>
using namespace std;
using ll = long long;
inline pair<int,int> next_state(int hi, int cur, char c) {
int ncur = cur + (c == 'L' ? 1 : -1);
int nhi = hi;
if (ncur < 0) {
nhi = hi + 1;
ncur = 0;
} else {
nhi = max(hi, ncur);
}
if (nhi > 2) return {-1, -1};
return {nhi, ncur};
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
ll M;
string S;
cin >> N >> M >> S;
// ways[len][hi][cur]
static int ways[1000001][3][3];
// base: len = 0
for (int h = 0; h <= 2; h++)
for (int c = 0; c <= h; c++)
ways[0][h][c] = 1;
// build DP
for (int len = 1; len <= N; len++) {
for (int h = 0; h <= 2; h++) {
for (int c = 0; c <= h; c++) {
ll v = 0;
for (char ch : {'L', 'P'}) {
auto [nh, nc] = next_state(h, c, ch);
if (nh != -1)
v += ways[len - 1][nh][nc];
}
ways[len][h][c] = v % M;
}
}
}
// compute rank
ll rank = 1;
int hi = 0, cur = 0;
for (int i = 0; i < N; i++) {
int rem = N - i - 1;
if (S[i] == 'P') {
auto [nh, nc] = next_state(hi, cur, 'L');
if (nh != -1)
rank = (rank + ways[rem][nh][nc]) % M;
}
auto [nh, nc] = next_state(hi, cur, S[i]);
hi = nh;
cur = nc;
}
cout << rank % M << '\n';
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... |