Submission #688527

# Submission time Handle Problem Language Result Execution time Memory
688527 2023-01-27T16:15:03 Z finn__ Linear Garden (IOI08_linear_garden) C++17
100 / 100
17 ms 9272 KB
#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) % m << '\n';
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 324 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 1 ms 340 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 468 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 468 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 852 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 980 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 3176 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 6 ms 3944 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 8 ms 4840 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 9 ms 5872 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 15 ms 9272 KB Output is correct
2 Correct 14 ms 9200 KB Output is correct
3 Correct 17 ms 9200 KB Output is correct