#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pll pair<int, int>
#define mp make_pair
#define pb push_back
#define f first
#define s second
signed main(){
string s; int n,k;cin>>n>>k>>s;
vector<int> sj(n,0),so(n, 0), si(n, 0);
for(int i=0;i<n;i++){
char c=s[i];
if(c=='J'){
sj[i]++;
}
if(c=='O'){
so[i]++;
}
else if(c=='I')si[i]++;
if(i>=1)sj[i]+=sj[i-1], si[i]+=si[i-1], so[i]+=so[i-1];
}
int ans=1e9;
for(int i=0;i<n;i++){
if(s[i]=='J' and sj[i]>=k){
int f=lower_bound(sj.begin(),sj.end(), sj[i]-k+1)-sj.begin();
int a=lower_bound(so.begin(),so.end(), so[i]+k)-so.begin();
if(a>=n)break;
int b=lower_bound(si.begin(),si.end(),si[a]+k)-si.begin();
if(b>=n)break;
//~ printf("%lld %lld %lld\n", f,a,b);
ans=min(ans, b-f+1-3*k);
}
}
if(ans >=1e9)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... |