| # | 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... | ||||
