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 <cstdlib>
#include <string>
#include <set>
#include <map>
#include <algorithm>
#include <bitset>
#include <queue>
#include <math.h>
#include <stack>
#include <vector>
#include <string.h>
#include <random>
typedef long long ll;
const ll MOD = 1e9 + 7, INF = 1e18;
using namespace std;
string s;
int n, d[1000000][3][5], dn[2][5][5][5], m;
void add_self (int& a, int b)
{
a += b;
if (a >= m) a -= m;
}
int main ()
{
cin >> n >> m;
dn[0][2][3][3] = 1;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < 3; j++)
for (int k = j; k < min (5, j + 3); k++)
for (int f = j; f <= k; f++)
{
if (max (k, f + 1) - j <= 2) add_self (dn[1][j][max (k, f + 1)][f + 1], dn[0][j][k][f]);
if (k - min (j, f - 1) <= 2) add_self (dn[1][min (j, f - 1)][k][f - 1], dn[0][j][k][f]);
add_self (d[i][j][k], dn[0][j][k][f]);
}
for (int j = 0; j < 3; j++)
for (int k = j; k < min (5, j + 3); k++)
for (int f = j; f <= k; f++)
{
dn[0][j][k][f] = dn[1][j][k][f];
dn[1][j][k][f] = 0;
}
}
cin >> s;
int max_balance = 2, min_balance = 2, balance = 2, ans = 0;
for (int i = 0; i < n; i++)
{
if (s[i] == 'P')
{
for (int j = 0; j < 3; j++)
for (int k = j; k < min (5, j + 3); k++)
if (max (max_balance, k + balance - 2) - min (min_balance, j + balance - 2) <= 2)
{
add_self (ans, d[n - i - 1][j][k]);
}
balance--;
}
else balance++;
max_balance = max (max_balance, balance);
min_balance = min (min_balance, balance);
}
cout << (ans + 1) % m;
}
# | 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... |