Submission #688525

#TimeUsernameProblemLanguageResultExecution timeMemory
688525finn__Linear Garden (IOI08_linear_garden)C++17
95 / 100
15 ms10224 KiB
#include <bits/stdc++.h>
using namespace std;

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

    size_t n;
    uint64_t m;
    string s;
    cin >> n >> m >> s;

    vector<uint64_t> pow2(n + 1);
    pow2[0] = 1;
    for (size_t i = 1; i <= n; i++)
        pow2[i] = (pow2[i - 1] * 2) % m;

    int min_diff = 0, max_diff = 0, curr_diff = 0;
    uint64_t ans = 0;
    for (size_t i = 0; i < n; i++)
    {
        switch (s[i])
        {
        case 'L':
            curr_diff--;
            break;
        case 'P':
            if (max_diff - min(min_diff, curr_diff - 1) == 2)
                ans = (ans + pow2[(n - i - 1 + (curr_diff - 1 == (max_diff - min(min_diff, curr_diff - 1)) / 2)) / 2]) % m;
            else if (max_diff - min(min_diff, curr_diff - 1) == 1)
                ans = (ans + pow2[(n - i - 1) / 2] + pow2[(n - i) / 2] - 1) % m;
            curr_diff++;
            break;
        }

        min_diff = min(min_diff, curr_diff);
        max_diff = max(max_diff, curr_diff);
    }

    cout << ans + 1 << '\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...