제출 #1335811

#제출 시각아이디문제언어결과실행 시간메모리
1335811WongYiKaiJJOOII 2 (JOI20_ho_t2)C++20
0 / 100
1 ms344 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int main(){
    ll n,k;
    cin >> n >> k;
    string s;
    cin >> s;
    queue<ll> j,o;
    ll next[n];
    ll pos[n+1][3];
    ll num[3];
    memset(num,0,sizeof(num));
    for (int i=0;i<n;i++){
        if (s[i]=='J'){
            j.push(i);
            pos[num[0]][0] = i;
            num[0]++;
        }
        else if (s[i]=='O'){
            o.push(i);
            while (!j.empty()){
                next[j.front()] = num[1];
                j.pop();
            }
            pos[num[1]][1] = i;
            num[1]++;
        }
        else if (s[i]=='I'){
            while (!o.empty()){
                next[o.front()] = num[2];
                o.pop();
            }
            pos[num[2]][2] = i;
            num[2]++;
        }
    }
    ll ans = n*2;
    for (int i=0;i<=num[0]-k;i++){
        ll s1 = pos[i+k-1][0];
        if (next[s1]==-1) continue;
        s1 = next[s1];
        if (s1+k-1 >= num[1]) continue;
        s1 = pos[s1+k-1][1];
        if (next[s1]==-1) continue;
        s1 = next[s1];
        if (s1+k-1 >= num[2]) continue;
        ans = min(ans,n-1-pos[s1+k-1][2]+pos[i][0]);
    }
    cout << ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...