제출 #1015221

#제출 시각아이디문제언어결과실행 시간메모리
1015221aufanJJOOII 2 (JOI20_ho_t2)C++17
100 / 100
34 ms12060 KiB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second

using namespace std;

const int inf = 1e9;

int32_t main()
{
        ios_base::sync_with_stdio(false);
        cin.tie(NULL);
        
        int n, k;
        cin >> n >> k;

        string s;
        cin >> s;
        s = '?' + s;

        vector<vector<int>> pref(n + 1, vector<int>(3));
        for (int i = 1; i <= n; i++) {
                pref[i] = pref[i - 1];
                if (s[i] == 'J') pref[i][0] += 1;
                if (s[i] == 'O') pref[i][1] += 1;
                if (s[i] == 'I') pref[i][2] += 1;
        }

        int p = 1, ans = inf;
        for (int i = 1; i <= n; i++) {
                while (p + 1 <= n && pref[p][1] - pref[i - 1][1] < k) p += 1;
                if (pref[p][1] - pref[i - 1][1] < k) break;

                int lf = 1, rg = i - 1, pl = -1;
                while (lf <= rg) {
                        int md = (lf + rg) / 2;

                        if (pref[i - 1][0] - pref[md - 1][0] >= k) {
                                pl = md;
                                lf = md + 1;
                        } else {
                                rg = md - 1;
                        }
                }

                if (pl == -1) continue;

                int pr = -1;
                lf = p + 1, rg = n;
                while (lf <= rg) {
                        int md = (lf + rg) / 2;

                        if (pref[md][2] - pref[p][2] >= k) {
                                pr = md;
                                rg = md - 1;
                        } else {
                                lf = md + 1;
                        }
                }

                if (pr == -1) continue;

                ans = min(ans, (pr - pl + 1) - 3 * k);
        }
        
        cout << (ans == inf ? -1 : ans) << '\n';
        
        return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...