제출 #1232822

#제출 시각아이디문제언어결과실행 시간메모리
1232822just_crowElection (BOI18_election)C++20
0 / 100
7 ms320 KiB
#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;

    cin >> n;

    vector<char> el(n);

    for (int i = 0; i < n; ++i) {
        cin >> el[i];
    }

    int q;

    cin >> q;

    for (int i = 0; i < q; ++i) {
        int a, b;

        cin >> a >> b;

        vector<int> removeclump, removeclump1;

        int currcs = 0;
        int currts = 0;

        bool cstate = true;

        for (int i = a - 1; i < b; ++i) {
            if (el[i] == 'C' and !cstate) {
                removeclump.push_back(currts - currcs + min((removeclump.size() > 0 ? removeclump.back() : 0), 0));

                currcs = 1;
                currts = 0;

                cstate = true;
            } else if (el[i] == 'C') {
                ++currcs;
            } else if (el[i] == 'T') {
                if (cstate) {
                    cstate = false;
                }

                ++currts;
            }
        }

        if (!cstate) {
            removeclump.push_back(currts - currcs + min((removeclump.size() > 0 ? removeclump.back() : 0), 0));
        }

        // FROM BACK

        currcs = 0;
        currts = 0;

        cstate = true;

        for (int i = b - 1; i >= a - 1; --i) {
            if (el[i] == 'C' and !cstate) {
                removeclump1.push_back(currts - currcs + min((removeclump1.size() > 0 ? removeclump1.back() : 0), 0));

                currcs = 1;
                currts = 0;

                cstate = true;
            } else if (el[i] == 'C') {
                ++currcs;
            } else if (el[i] == 'T') {
                if (cstate) {
                    cstate = false;
                }

                ++currts;
            }
        }

        if (!cstate) {
            removeclump1.push_back(currts - currcs + min((removeclump1.size() > 0 ? removeclump1.back() : 0), 0));
        }

        // END BACK

        int sum = 0;

        int cs = removeclump.size();

        for (int i = 0; i < cs; ++i) {
            sum += max(removeclump[i], removeclump1[cs - i - 1]);
        }

        cout << sum << endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...