Submission #114529

# Submission time Handle Problem Language Result Execution time Memory
114529 2019-06-01T16:38:35 Z popovicirobert Linear Garden (IOI08_linear_garden) C++14
100 / 100
74 ms 37624 KB
#include <bits/stdc++.h>
#define lsb(x) (x & (-x))
#define ll long long
#define ull unsigned long long
// 217
// 44

using namespace std;

const int MAXN = (int) 1e6;

char str[MAXN + 1];
int dp[MAXN + 1][3][3], m;

inline void mod(int &x) {
    if(x >= m)
        x -= m;
}

inline void add(int &x, int y) {
    x += y;
    mod(x);
}

int main() {
    //ifstream cin("A.in");
    //ofstream cout("A.out");
    int i, n;
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);

    cin >> n >> m >> str + 1;

    dp[0][0][0] = 1;
    for(i = 0; i < n; i++) {
        for(int l = 0; l < 3; l++) {
            for(int p = 0; p < 3; p++) {
                if(l < 2) {
                    add(dp[i + 1][l + 1][max(p - 1, 0)], dp[i][l][p]);
                }
                if(p < 2) {
                    add(dp[i + 1][max(l - 1, 0)][p + 1], dp[i][l][p]);
                }
            }
        }
    }

    int ans = 1;
    int best_p = 0, best_l = 0;

    for(i = 1; i <= n; i++) {

        if(str[i] == 'P' && best_l < 2) { // L
            int cur_p = max(best_p - 1, 0);
            int cur_l = best_l + 1;

            for(int l = 0; l < 3; l++) {
                for(int p = 0; p < 3; p++) {
                    if(cur_p + p <= 2 && cur_l + l <= 2) {
                        add(ans, dp[n - i][l][p]);
                    }
                }
            }
        }

        if(str[i] == 'P') {
            best_p++;
            best_l--;
        }
        else {
            best_l++;
            best_p--;
        }

        best_l = max(best_l, 0);
        best_p = max(best_p, 0);
    }

    cout << ans;

    //cin.close();
    //cout.close();
    return 0;
}

Compilation message

linear_garden.cpp: In function 'int main()':
linear_garden.cpp:32:26: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
     cin >> n >> m >> str + 1;
                      ~~~~^~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 384 KB Output is correct
2 Correct 2 ms 384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 512 KB Output is correct
2 Correct 2 ms 512 KB Output is correct
3 Correct 2 ms 512 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 1024 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 1152 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 2560 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 3072 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 26 ms 11872 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 33 ms 15324 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 39 ms 19320 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 46 ms 23516 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 72 ms 37496 KB Output is correct
2 Correct 74 ms 37556 KB Output is correct
3 Correct 74 ms 37624 KB Output is correct