이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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... |