Submission #432683

#TimeUsernameProblemLanguageResultExecution timeMemory
432683zxcvbnmLinear Garden (IOI08_linear_garden)C++14
100 / 100
16 ms6248 KiB
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, mod;
    cin >> n >> mod;
    int p[n];
    p[0] = 1;
    for(int i = 1; i < n; i++) {
        p[i] = p[i-1] * 2;
        p[i] %= mod;
    }

    string str;
    cin >> str;
    int low = 0, high = 0, curr = 0, ans = 1;
    for(int i = 0; i < n; i++) {
        if (str[i] == 'P') {
            int curr_2 = curr-1;
            int low_2 = min(low, curr_2);
            int high_2 = high;
            curr++;
            if (high_2 - low_2 > 2) continue;
            else if (high_2 - low_2 == 2) {
                if (curr_2 != high_2 && curr_2 != low_2) {
                    ans += p[(n-i)/2];
                    ans %= mod;
                } else {
                    ans += p[(n-i-1)/2];
                    ans %= mod;
                }
            } else if (high_2 - low_2 == 1) {
                ans += p[(n-i)/2] + p[(n-i-1)/2] - 1;
                ans %= mod;
                if (ans < 0) {
                    ans += mod;
                }
            }
        } else {
            curr--;
        }
        low = min(low, curr);
        high = max(high, curr);
//        cout << ans << " " << low << " " << high << "\n";
    }
    cout << ans << "\n";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...