Submission #770711

#TimeUsernameProblemLanguageResultExecution timeMemory
770711JellyTheOctopusJJOOII 2 (JOI20_ho_t2)C++17
100 / 100
19 ms4244 KiB
#include <bits/stdc++.h>
using namespace std;

#define f first
#define s second

int N, K;
string str;

int main() {
    cin >> N >> K >> str;
    vector<int> J, O, I;
    for (int i = 0; i < (int)str.size(); i++) {
        if (str[i] == 'J') {
            J.push_back(i+1);
        }
        else if (str[i] == 'O') {
            O.push_back(i+1);
        }
        else {
            I.push_back(i+1);
        }
    }
    vector<int> A[2], B[2], C[2];
    for (int i = 0; i+K-1 < (int)J.size(); i++) {
        A[0].push_back(J[i]);
        A[1].push_back(J[K+i-1]);
    }
    for (int i = 0; i+K-1 < (int)O.size(); i++) {
        B[0].push_back(O[i]);
        B[1].push_back(O[K+i-1]);
    }
    for (int i = 0; i+K-1 < (int)I.size(); i++) {
        C[0].push_back(I[i]);
        C[1].push_back(I[K+i-1]);
    }
    int ans = INT_MAX;
    for (int a = 0; a < (int)A[0].size(); a++) {
        if (upper_bound(B[0].begin(), B[0].end(), A[1][a]) == B[0].end()) break;
        int b = upper_bound(B[0].begin(), B[0].end(), A[1][a])-B[0].begin();
        if (upper_bound(C[0].begin(), C[0].end(), B[1][b]) == C[0].end()) break;
        int c = upper_bound(C[0].begin(), C[0].end(), B[1][b])-C[0].begin();
        ans = min(ans, C[1][c]-A[0][a]-3*K+1);
    }
    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...