Submission #770689

#TimeUsernameProblemLanguageResultExecution timeMemory
770689JellyTheOctopusJJOOII 2 (JOI20_ho_t2)C++17
13 / 100
2076 ms3572 KiB
#include <bits/stdc++.h>
using namespace std;

int N, K;
string s;

int main() {
    cin >> N >> K >> s;
    vector<int> J, O, I;
    for (int i = 0; i < (int)s.size(); i++) {
        if (s[i] == 'J') J.push_back(i+1);
        else if (s[i] == 'O') O.push_back(i+1);
        else I.push_back(i+1);
    }
    O.push_back(INT_MAX);
    I.push_back(INT_MAX);
    int ans = INT_MAX;
    for (int i = 0; i+K-1 < (int)J.size(); i++) {
        int cur = 0;
        vector<int> arr;
        for (int j = i; j < i+K; j++) {
            if (!arr.empty()) cur += J[j]-arr.back()-1;
            arr.push_back(J[j]);
        }
        int u = upper_bound(O.begin(), O.end(), arr.back())-O.begin();
        if (u == INT_MAX) break;
        bool flag = false;
        for (int j = u; j < u+K; j++) {
            if (O[j] == INT_MAX) {
                flag = true;
                break;
            }
            cur += O[j]-arr.back()-1;
            arr.push_back(O[j]);
        }
        if (flag) break;
        u = upper_bound(I.begin(), I.end(), arr.back())-I.begin();
        if (u == INT_MAX) break;
        for (int j = u; j < u+K; j++) {
            if (I[j] == INT_MAX) {
                flag = true;
                break;
            }
            cur += I[j]-arr.back()-1;
            arr.push_back(I[j]);
        }
        if (flag) break;
        ans = min(ans, cur);
    }
    if (ans == INT_MAX) ans = -1;
    cout << ans << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...