#include <bits/stdc++.h>
#define forn(i,n) for(int i=0;i<int(n);++i)
#define fort(i,n) for(int i=0;i<=int(n);++i)
#define fori(i,a,n) for(int i=a;i<int(n);++i)
#define forit(i,a,n) for(int i=a;i<=int(n);++i)
#define ALL(v) v.begin(),v.end()
#define SZ(v) (int)v.size()
#define DBG(a) cerr<<#a<<" = "<<(a)<<endl
#define DBGA(a) cerr<<#a<<" = "<<(a)<<", ";
#define DBG2(a,b) do{DBGA(a)DBG(b);}while(0)
#define DBG3(a,b,c) do{DBGA(a)DBGA(b)DBG(c);}while(0)
#define DBG4(a,b,c,d) do{DBGA(a)DBGA(b)DBGA(c)DBG(d);}while(0)
#define LINE cerr<<"===================================="<<endl
using namespace std;
template<typename T>
ostream &operator<<(ostream &os, const vector<T> &v){
os<<"[";
forn(i,v.size()){
if(i) os<<" ";
os<<v[i];
}
os<<"]";
return os;
}
typedef long long ll;
typedef long double ld;
void solve(){
int n, k;
string s;
cin>>n>>k>>s;
deque<int> J, O, I;
forn(i,n){
if(s[i] == 'J') J.push_back(i);
else if(s[i] == 'O') O.push_back(i);
else I.push_back(i);
}
int ans = 2*n;
forn(i,n){
if(J.front() < i) J.pop_front();
if(O.front() < i) O.pop_front();
if(I.front() < i) I.pop_front();
if(SZ(J) < k) break;
while(SZ(O) && O.front() < J[k-1]) O.pop_front();
if(SZ(O) < k) break;
while(SZ(I) && I.front() < O[k-1]) I.pop_front();
if(SZ(I) < k) break;
int cost = I[k-1] - i + 1 - 3*k;
ans = min(ans, cost);
}
if(ans == 2*n) ans = -1;
cout<<ans<<"\n";
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
#ifdef LOCAL
assert(freopen("input.in", "r", stdin));
//~ freopen("output.out", "w", stdout);
#endif
#ifdef LOCAL
int tcs; cin>>tcs;
while(tcs--)
#endif
solve();
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |