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;
#define all(x) begin(x),end(x)
vector<array<int,9>> dp; // 5*diff + min + 2
vector<array<bool,9>> s;
int N,M;
int num_combinations(int off,int mins, int maxs)
{
if(maxs > 2 || mins < -2) return 0;
if(off >= N) return 1;
mins = min(mins,0);
maxs = max(maxs,0);
if(s[off][maxs-3*mins]) return dp[off][maxs-3*mins];
// try L
int comb = 0;
comb += num_combinations(off+1,mins-1,maxs-1);
comb += num_combinations(off+1,mins+1,maxs+1);
comb %= M;
dp[off][maxs-3*mins] = comb;
s[off][maxs-3*mins] = true;
return comb;
}
signed main()
{
cin >> N >> M;
dp.assign(N,array<int,9>{});
s.assign(N,array<bool,9>{});
int off = 1;
int mins = 0;
int maxs = 0;
for(int i = dp.size()-1; i >= 0; i--)
{
for(int mins = -2; mins <= 0; mins++)
{
for(int maxs = 0; maxs < 3; maxs++)
{
int64_t comb = 0;
comb += num_combinations(i+1,mins-1,maxs-1);
comb += num_combinations(i+1,mins+1,maxs+1);
if(comb >= M) comb -= M;
dp[i][maxs-3*mins] = comb;
s[i][maxs-3*mins] = true;
}
}
}
for(int i = 0; i < N; i++)
{
char c;
cin >> c;
if(c=='P') off += num_combinations(i+1,mins-1,maxs-1);
if(c=='P') {mins++;maxs++;}
else {mins--;maxs--;}
mins = min(mins,0);
maxs = max(maxs,0);
if(off>=M) off -= M;
}
cout << off << "\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... |