Submission #955154

#TimeUsernameProblemLanguageResultExecution timeMemory
955154ililogJJOOII 2 (JOI20_ho_t2)C++11
100 / 100
6 ms3304 KiB
using namespace std;
#include<iostream>
#include<fstream>

int vj[200001], vo[200001], vi[200001];
int lj, lo, li;
int n, k;
string s;

int main() {
    cin >> n >> k;
    cin >> s;
    for (int i = 0; i<n; i++) {
        if (s[i] == 'J') {
            vj[++lj] = i;
        } else if (s[i] == 'O') {
            vo[++lo] = i;
        } else {
            vi[++li] = i;
        }
    }
    
    int pj = 1, po = 1, pi = 1, minim = n+1;
    while (pj + k - 1 <= lj && po + k - 1 <= lo && pi + k - 1 <= li) {
        while (po + k - 1 <= lo && vo[po] <= vj[pj+k-1]) po++;
        
        if (po + k - 1 <= lo) {
            while (pi + k - 1 <= li && vi[pi] <= vo[po+k-1]) pi++;
            
            if (pj + k - 1 <= lj && po + k - 1 <= lo && pi + k - 1 <= li) {
                int st = vj[pj];
                int dr = vi[pi+k-1];
                minim = min(minim, dr-st+1-3*k);
            }
        }
        pj++;
    }
    
    if (minim == n+1) {
        cout << "-1";
    } else {
        cout << minim;
    }
    
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...