Submission #1238430

#TimeUsernameProblemLanguageResultExecution timeMemory
1238430trimkusJJOOII 2 (JOI20_ho_t2)C++20
100 / 100
25 ms11848 KiB
#include <bits/stdc++.h>
using namespace std;




int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int N, K;
    cin >> N >> K;
    vector<vector<int>> nxt(N, vector<int>(3, -1));
    string s;
    cin >> s;
    vector<char> c = {'J', 'O', 'I'};
    for (int it = 0; it < 3; ++it) {
    	char need = c[it];
	    queue<int> q;
	    for (int i = 0; i < N; ++i) {
	    	if (need == s[i]) {
	    		q.push(i);
	    	}
	    	while (q.size() == K) {
	    		nxt[q.front()][it] = i;
	    		q.pop();
	    	}
	    }
    }
    for (int it = 0; it < 3; ++it) {
    	for (int j = N - 2; j >= 0; --j) {
    		if (nxt[j][it] == -1) nxt[j][it] = nxt[j + 1][it];
    	}
    }
    int res = -1;
    for (int i = 0; i < N; ++i) {
    	int j = i;
    	for (int it = 0; j != -1 && it < 3; ++it) {
    		j = nxt[j][it];
    	}
    	if (j == -1) continue;
		int op = j - i + 1 - 3 * K;
    	if (res == -1 || op < res) {
    		res = op;
    	}
    }
    cout << res << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...