Submission #821482

#TimeUsernameProblemLanguageResultExecution timeMemory
821482Alihan_8JJOOII 2 (JOI20_ho_t2)C++17
100 / 100
7 ms5984 KiB
#include <bits/stdc++.h>

using namespace std;

#define all(x) x.begin(), x.end()
#define pb push_back
#define ln '\n'
#define int long long

template <class _T>
bool chmin(_T &x, const _T &y){
    bool flag = false;
    if ( x > y ){
        x = y; flag |= true;
    }
    return flag;
}

template <class _T>
bool chmax(_T &x, const _T &y){
    bool flag = false;
    if ( x < y ){
        x = y; flag |= true;
    }
    return flag;
}

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, k; cin >> n >> k;
    string s; cin >> s;
    const int inf = 1e15 + 1;
    vector <int> pf(n + 1, inf), sf(n + 1, inf);
    deque <int> dq;
    for ( int i = 0; i < n; i++ ){
        if ( s[i] == 'J' ){
            dq.pb(i);
        }
        if ( (int)dq.size() > k ){
            dq.pop_front();
        }
        if ( (int)dq.size() < k ){
            continue;
        }
        pf[i + 1] = (i - dq[0] + 1) - k;
    }
    dq.clear();
    for ( int i = n - 1; i >= 0; i-- ){
        if ( s[i] == 'I' ){
            dq.push_front(i);
        }
        if ( (int)dq.size() > k ){
            dq.pop_back();
        }
        if ( (int)dq.size() < k ){
            continue;
        }
        sf[i + 1] = (dq[k - 1] - i + 1) - k;
    }
    vector <int> dp(n + 2, inf);
    for ( int i = n; i > 0; i-- ){
        dp[i] = min(dp[i + 1], sf[i] + i);
    }
    int it = 1, f = 0, ans = inf;
    for ( int i = 1; i <= n; i++ ){
        if ( i > 1 ){
            f -= (s[i - 1] == 'O');
        }
        while ( it + 1 <= n and f < k ){
            f += (s[it] == 'O');
            it++;
        }
        if ( f < k ){
            break;
        }
        chmin(ans, (pf[i] - i) + dp[it + 1] - k - 1);

    }
    if ( ans > n ){
        ans = -1;
    }
    cout << ans;

    cout << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...