Submission #964059

#TimeUsernameProblemLanguageResultExecution timeMemory
964059Akshat369JJOOII 2 (JOI20_ho_t2)C++17
100 / 100
17 ms5924 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define vi vector<int>
#define endl '\n'
const int N = (int)1e5+5;


void Solve(){
    int n , k; cin>>n>>k;
    string s; cin>>s;
    deque<char> st;
    for(auto &i : s){
        st.push_back(i);
    }
    while (!st.empty() and st.front()!='J'){
        st.pop_front();
    }
    while(!st.empty() and st.back() != 'I'){
        st.pop_back();
    }
    if(st.empty()){
        cout<<-1<<endl;
        return;
    }
    s = " " + s;
    vi prej(n+1) , prei(n+1) , preo(n+1);

    for(int i = 1 ; i <= n ; i++){
        prej[i] = prej[i-1] + (s[i]=='J');
        prei[i] = prei[i-1] + (s[i]=='I');
        preo[i] = preo[i-1] + (s[i]=='O');
    }
//    cout<<"j"<<" ";
//    for(int i = 1 ; i<= n ; i++){
//        cout<<prej[i]<<" ";
//    }
//    cout<<endl;
//    cout<<"o"<<" ";
//    for(int i = 1 ; i<= n ; i++){
//        cout<<preo[i]<<" ";
//    }
//    cout<<endl;
//    cout<<"i"<<" ";
//    for(int i = 1 ; i<= n ; i++){
//        cout<<prei[i]<<" ";
//    }
//    cout<<endl;
    int ans = 1e18;
    for (int i = 1; i <= n; ++i) {
        if (s[i]=='J'){
            int j = lower_bound(prej.begin(), prej.end(),prej[i-1]+k) - prej.begin();
           // cout<<i<<" "<<j<<" " << preo[j]+k <<endl;
            if (j>=n+1)continue;
            int o = lower_bound(preo.begin(), preo.end(),preo[j]+k) - preo.begin();
          //  cout<<j<<" "<<o<<endl;
            if(o>=n+1) continue;
            int ii = lower_bound(prei.begin(), prei.end(),prei[o]+k) - prei.begin();
            if(ii>=n+1) continue;
            int temp = (ii-i+1 - (3*k));
           // cout<<temp<<endl;
            ans = min(ans,temp);
        }
    }
    if(ans>=1e18){
        cout<<-1<<endl;
        return;
    }
    cout<<ans<<endl;
}

int32_t main(){

    Solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...