Submission #208953

#TimeUsernameProblemLanguageResultExecution timeMemory
208953AQTJJOOII 2 (JOI20_ho_t2)C++14
100 / 100
15 ms3844 KiB
#include <bits/stdc++.h>

using namespace std;

int N, K;
int lftmst[4][200005];
string s;
const string joi = "JOI";

int main(){
	cin.sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> N >> K >> s;
	for(int i = 1; i<=N; i++){
		lftmst[0][i] = i;
	}
	for(int t = 1; t<=3; t++){
		int cnt = 0;
		for(int l = 1, r = 1; r<=N; r++){
			if(s[r-1] == joi[t-1]){
				cnt++;
			}
			while(cnt > K){
				cnt -= (s[l-1] == joi[t-1]);
				l++;
			}
			while(cnt == K && l < r && s[l-1] != joi[t-1]){
				l++;
			}
			//cout << l << " " << r << "\n";
			if(cnt == K){
				lftmst[t][r] = lftmst[t-1][l];
			}
			//cout << lftmst[t][r] << " " << r << "\n";
		}
		//cout << "\n";
	}
	int rng = N+2;
	for(int i = 1; i<=N; i++){
		if(lftmst[3][i]) {
			rng = min(rng, i-lftmst[3][i]+1);
		}
	}
	if(rng == N+2){
		rng = -1;
	}
	else{
		rng -= 3*K;
	}
	cout << rng << "\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...