제출 #1130838

#제출 시각아이디문제언어결과실행 시간메모리
1130838lopkusJJOOII 2 (JOI20_ho_t2)C++20
0 / 100
0 ms324 KiB
#include <bits/stdc++.h>

#define int long long

using namespace std;

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n, k;
    cin >> n >> k;
    vector<int> a(n + 1);
    for(int i = 1; i <= n; i++) {
        char x;
        cin >> x;
        if(x == 'J') {
            a[i] = 1;
        }
        if(x == 'O') {
            a[i] = 2;
        }
        if(x == 'I') {
            a[i] = 3;
        }
    }
    int ans = 0;
    int cnt1 = 0;
    int l = - 1, r = - 1;
    for(int i = 1; i <= n; i++) {
        if(a[i] == 1) {
            cnt1 += 1;
        }
        if(a[i] != 1 && cnt1) {
            ans += 1;
        }
        if(a[i] == 1 && cnt1 == k) {
            l = i + 1;
            break;
        }
    }
    int cnt3 = 0;
    for(int i = n; i >= 1; i--) {
        if(a[i] == 3) {
            cnt3 += 1;
        }
        if(a[i] != 3 && cnt3) {
            ans += 1;
        }
        if(a[i] == 3 && cnt3 == k) {
            r = i - 1;
            break;
        }
    }
    if(l > r) {
        cout << - 1;
        return 0;
    }
    if(l == - 1 || r == - 1) {
        cout << - 1;
        return 0;
    }
    int solpref = 0;
    int solsuf = 0;
    int cnt2 = 0;
    for(int i = l; i <= r; i++) {
        if(a[i] == 2) {
            cnt2 += 1;
        }
        else {
            solpref += 1;
        }
        if(cnt2 == k) {
            break;
        }
    }
    cnt2 = 0;
    for(int i = r; i >= l; i--) {
        if(a[i] == 2) {
            cnt2 += 1;
        }
        else {
            solsuf += 1;
        }
        if(cnt2 == k) {
            break;
        }
    }
    cout << ans + min(solpref, solsuf);
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...