#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
#include <string>
using namespace std;
int main() {
int n, k, ans = 1e8;
vector<int> pj, po, pi;
string s;
cin >> n >> k >> s;
pj.push_back(0);
po.push_back(0);
pi.push_back(0);
for(int i = 0; i < n; i++){
pj.push_back(pj[i] + (s[i] == 'J'));
po.push_back(po[i] + (s[i] == 'O'));
pi.push_back(pi[i] + (s[i] == 'I'));
}
for(int i = 0; i < n; i++){
if(s[i] == 'J'){
int l = i, r = n-1, target = pj[i+1] + k-1, curSum = 0, a = 0;
if(target > pj[n]){
break;
}
//cout << target << endl;
while(l <= r){
int mid = (l+r)/2;
if(pj[mid+1] < target){
l = mid+1;
}
else{
r = mid-1;
a = mid;
}
//cout << l << " " << r << endl;
}
//cout << a << " ";
int pos = a;
l = a;
r = n-1;
target = po[l+1] + k;
if(target > po[n]){
break;
}
//cout << target << endl;
while(l <= r){
int mid = (l+r)/2;
if(po[mid+1] < target){
l = mid+1;
}
else{
r = mid-1;
a = mid;
}
//cout << l << " " << r << endl;
}
//cout << a << " ";
pos = a;
l = a;
r = n-1;
target = pi[l+1] + k;
if(target > pi[n]){
break;
}
//cout << target;
while(l <= r){
int mid = (l+r)/2;
if(pi[mid+1] < target){
l = mid+1;
}
else{
r = mid-1;
a = mid;
}
//cout << l << " " << r << endl;
}
//cout << a << endl;
curSum += ((a-i+1) - 3*k);
ans = min(ans, curSum);
}
}
if(ans == 1e8){
cout << -1;
}
else{
cout << ans;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |