# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
441878 | rainboy | Linear Garden (IOI08_linear_garden) | C11 | 95 ms | 10044 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.
/* discussed with Dukkha on dp/dq */
#include <stdio.h>
#define N 1000000
int main() {
static int xx[N], yy[N], dp[3][3], dq[3][3];
static char s[N + 1];
int n, m, i, cnt, x, x_, y, y_;
scanf("%d%d%s", &n, &m, s);
for (i = 1; i < n; i++) {
if (s[i - 1] == 'P') {
xx[i] = xx[i - 1] + 1;
yy[i] = yy[i - 1] - 1;
} else {
xx[i] = xx[i - 1] - 1;
yy[i] = yy[i - 1] + 1;
}
if (xx[i] < 0)
xx[i] = 0;
if (yy[i] < 0)
yy[i] = 0;
}
dp[0][0] = 1;
cnt = 1;
for (i = n - 1; i >= 0; i--) {
if (s[i] == 'P') {
x = xx[i] - 1;
y = yy[i] + 1;
if (x < 0)
x = 0;
for (x_ = 0; x + x_ < 3; x_++)
for (y_ = 0; y + y_ < 3; y_++)
cnt = (cnt + dp[x_][y_]) % m;
}
for (x = 0; x < 3; x++)
for (y = 0; y < 3; y++) {
/* P */
x_ = x + 1;
y_ = y - 1;
if (y_ < 0)
y_ = 0;
if (x_ < 3)
dq[x_][y_] = (dq[x_][y_] + dp[x][y]) % m;
/* L */
x_ = x - 1;
y_ = y + 1;
if (x_ < 0)
x_ = 0;
if (y_ < 3)
dq[x_][y_] = (dq[x_][y_] + dp[x][y]) % m;
}
for (x = 0; x < 3; x++)
for (y = 0; y < 3; y++) {
dp[x][y] = dq[x][y];
dq[x][y] = 0;
}
}
printf("%d\n", cnt);
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... |