제출 #1335813

#제출 시각아이디문제언어결과실행 시간메모리
1335813WongYiKaiJJOOII 2 (JOI20_ho_t2)C++20
100 / 100
8 ms7408 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 = -1;
    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 = max(ans,n-1-pos[s1+k-1][2]+pos[i][0]);
    }
    if (ans==-1) cout << -1;
    else cout << n-ans-3*k;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...