# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
54084 | imeimi2000 | Linear Garden (IOI08_linear_garden) | C++17 | 215 ms | 9596 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 <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#include <set>
#include <map>
#include <unordered_map>
#include <functional>
#include <cstring>
#include <cmath>
#include <ctime>
#include <cstdlib>
using namespace std;
typedef long long llong;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<llong, llong> pll;
int n, mod;
char str[1000001];
int dp1[5][5][5];
int dp2[5][5][5];
int mx[1000001];
int mn[1000001];
int main() {
scanf("%d%d%s", &n, &mod, str);
int sum = 0, mxx = 0, mnx = 0;
for (int i = 0; i < n; ++i) {
--sum;
mx[i] = max(mxx - sum, 0);
mn[i] = min(mnx - sum, 0);
if (str[i] == 'P') sum += 2;
mxx = max(mxx, sum);
mnx = min(mnx, sum);
}
dp1[2][2][2] = 1;
int ans = 1;
for (int i = n; i--; ) {
if (str[i] == 'P') {
for (int j = 0; j <= 2; ++j) {
for (int k = 2; k <= j + 2; ++k) {
for (int l = j; l <= k; ++l) {
if (max(k, l + mx[i]) - min(j, l + mn[i]) <= 2) {
ans += dp1[j][k][l];
ans %= mod;
}
}
}
}
}
for (int j = 0; j <= 2; ++j) {
for (int k = 2; k <= j + 2; ++k) {
for (int l = j; l <= k; ++l) {
if (l < 4)
dp2[j][max(k, l + 1)][l + 1] += dp1[j][k][l];
if (l > 0)
dp2[min(j, l - 1)][k][l - 1] += dp1[j][k][l];
}
}
}
for (int j = 0; j <= 2; ++j) {
for (int k = 2; k <= j + 2; ++k) {
for (int l = j; l <= k; ++l) {
dp1[j][k][l] = dp2[j][k][l] % mod;
dp2[j][k][l] = 0;
}
}
}
}
printf("%d\n", ans);
return 0;
}
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... |