Submission #1324848

#TimeUsernameProblemLanguageResultExecution timeMemory
1324848kasamchiLinear Garden (IOI08_linear_garden)C++20
100 / 100
9 ms3284 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int N, M;
    cin >> N >> M;

    string S;
    cin >> S;

    vector<int> pow2(N / 2 + 1);
    pow2[0] = 1;
    for (int i = 1; i < (int)pow2.size(); i++) {
        pow2[i] = (pow2[i - 1] + pow2[i - 1]) % M;
    }

    auto f = [&] (int x) {
        if (x < 1) {
            return 0;
        } else {
            return pow2[x / 2] - 1;
        }
    };

    char last = 'X';
    int ans = 1;
    for (int i = 0; i < N; i++) {
        if (S[i] == 'P') {
            if (i > 0 && S[i - 1] == 'L') {
                if (i > 1 && S[i - 2] == 'L') {
                } else if (last == 'L') {
                } else {
                    ans = ((long long)ans + f(N - i - 1) + 1) % M;
                }
            } else {
                if (last == 'L') {
                    ans = ((long long)ans + f(N - i - 1) + 1) % M;
                } else {
                    ans = ((long long)ans + f(N - i) + f(N - i - 1) + 1) % M;
                }
            }
        }
        if (i > 0 && S[i] == S[i - 1]) {
            last = S[i];
        }
    }
    cout << ans << '\n';
}
#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...