# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
171013 | dantoh000 | Linear Garden (IOI08_linear_garden) | C++14 | 294 ms | 17028 KiB |
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;
int dp[2][5][5][5];
int l[1000005], r[1000005], m[1000005];
int n,mod;
int a[1000005];
int main(){
scanf("%d%d",&n,&mod);
l[0] = r[0] = m[0] = 2;
for (int i = 1; i <= n; i++){
char x;
scanf(" %c",&x);
a[i] = (x=='L')?-1:1;
m[i] = m[i-1] + a[i];
l[i] = min(l[i-1],m[i]);
r[i] = max(r[i-1],m[i]);
}
int ans = 1;
for (int i = n; i >= 0; i--){
if (i == n){
for (int L = 0; L <= 4; L++){
for (int R = 0; R <= 4; R++){
for (int M = 0; M <= 4; M++){
if (L <= M && M <= R && R - L <= 2) dp[n&1][L][R][M] = 1;
}
}
}
goto calc;
}
for (int L = 0; L <= 2; L++){
for (int R = 2; R <= 4; R++){
for (int M = 0; M <= 4; M++){
dp[i&1][L][R][M] = 0;
if (L <= M && M <= R && R - L <= 2){
if (R-min(L,M-1) <= 2){
dp[i&1][L][R][M] += dp[1-i&1][min(L,M-1)][R][M-1];
dp[i&1][L][R][M] %= mod;
}
if (max(R,M+1)-L <= 2){
dp[i&1][L][R][M] += dp[1-i&1][L][max(R,M+1)][M+1];
dp[i&1][L][R][M] %= mod;
}
//printf("%d %d %d %d %d\n",i,L,R,M,dp[i&1][L][R][M]);
}
}
}
}
calc:;
if (a[i] == 1){
int nL = min(l[i-1],m[i-1]-1);
int nM = m[i-1]-1;
int nR = r[i-1];
if (nR-nL <= 2){
//printf("if takes -1 for %d, %d %d %d\n",i,nL,nR,nM);
//printf("num ways dp(%d %d %d %d) = %d\n",i,nL,nR,nM,dp[i&1][nL][nR][nM]);
ans += dp[i&1][nL][nR][nM];
ans %= mod;
}
}
}
printf("%d",ans);
}
Compilation message (stderr)
# | 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... |