제출 #1132576

#제출 시각아이디문제언어결과실행 시간메모리
1132576tsengangJJOOII 2 (JOI20_ho_t2)C++20
100 / 100
11 ms3024 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ff first
#define ss second
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define ertunt return
int main(){
    ll n,k;
    cin >> n >> k;
    string s;
    cin >> s;
    vector<ll> v[3];
    for(ll i = 0; i < n; i++){
        if(s[i] == 'J')v[0].pb(i);
        if(s[i] == 'O')v[1].pb(i);
        if(s[i] == 'I')v[2].pb(i);
    }
    ll ans = 1e18;
    for(ll i = k - 1; i < v[0].size(); i++){
        ll cur = (v[0][i] - v[0][i-k+1]) - k;
        ll y = lower_bound(all(v[1]),v[0][i]) - v[1].begin();
        if(y+k-1 >= v[1].size())break;
        cur+=v[1][y] - v[0][i];
        cur+=(v[1][y+k-1] - v[1][y]) - k;
        ll x = lower_bound(all(v[2]),v[1][y+k-1]) - v[2].begin();
        if(x+k-1 >= v[2].size()) break;
        cur+=v[2][x] - v[1][y+k-1];
        cur+= (v[2][x+k-1] - v[2][x]) - k;
        ans = min(cur,ans);
    }
    if(ans == 1e18)cout << -1;
    else cout << ans+1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...