#include <bits/stdc++.h>
#define int long long
int n,k;
std::vector<int> Jidx;
std::vector<int> Oidx;
std::vector<int> Iidx;
signed main() {
std::ios::sync_with_stdio(false);std::cin.tie(nullptr);
std::cin >> n >> k;
std::string str;
std::cin >> str;
for(int i=0;i<n;i++){
if(str[i]=='J')Jidx.push_back(i);
if(str[i]=='O')Oidx.push_back(i);
if(str[i]=='I')Iidx.push_back(i);
}
int best = 1e18;
for(int i=0;i<=Jidx.size()-k;i++){
//std::cout << Jidx[i] << ' ' << Jidx[i+k-1]<< ' ';
int cost = Jidx[i+k-1]-Jidx[i]+1-k;
int Os = std::upper_bound(Oidx.begin(),Oidx.end(),Jidx[i+k-1])-Oidx.begin();
if(Os+k-1>=Oidx.size())continue;
//std::cout << Oidx[i] << ' ' << Oidx[i+k-1]<< ' ';
cost+=Oidx[Os]-Jidx[i+k-1]-1;
cost+=Oidx[Os+k-1]-Oidx[Os]+1-k;
int Is = std::upper_bound(Iidx.begin(),Iidx.end(),Oidx[Os+k-1])-Iidx.begin();
if(Is+k-1>=Iidx.size())continue;
//std::cout << Iidx[i] << ' ' << Iidx[i+k-1]<< ':';
cost+=Iidx[Is]-Oidx[Os+k-1]-1;
cost+=Iidx[Is+k-1]-Iidx[Is]+1-k;
best=std::min(best,cost);
//std::cout << cost << '\n';
}
if(best==1e18)best=-1;
std::cout << best << '\n';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |