제출 #704001

#제출 시각아이디문제언어결과실행 시간메모리
704001KenIsGeniusJJOOII 2 (JOI20_ho_t2)C++17
100 / 100
21 ms7124 KiB
#include <bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define all(x) (x).begin(), (x).end()
#define int long long
using namespace std;

#ifdef LOCAL
#define WOSAOJI freopen("in.txt", "r", stdin);
#else 
#define WOSAOJI ios_base::sync_with_stdio(0), cin.tie(0);
#endif

#define chmax(a, b) (a) = (a) > (b) ? (a) : (b)
#define chmin(a, b) (a) = (a) < (b) ? (a) : (b)

int n, k;
string s;

int calc(int i, vector<vector<int>> &cnt) {
    int here = i;
    i--;
    i = lower_bound(all(cnt[0]), cnt[0][i] + k) - cnt[0].begin();
    if (i > n) return 1 << 30;
    i = lower_bound(all(cnt[1]), cnt[1][i] + k) - cnt[1].begin();
    if (i > n) return 1 << 30;
    i = lower_bound(all(cnt[2]), cnt[2][i] + k) - cnt[2].begin();
    if (i > n) return 1 << 30;
    return i - here + 1;
}

signed main() {
    WOSAOJI
    cin >> n >> k;
    cin >> s;
    vector<vector<int>> cnt(3, vector<int>(n + 1, 0));
    s = " " + s;
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j < 3; j++) cnt[j][i] = cnt[j][i - 1];
        if (s[i] == 'J') cnt[0][i]++;
        if (s[i] == 'O') cnt[1][i]++;
        if (s[i] == 'I') cnt[2][i]++;
    }
    int ans = 1 << 30;
    for (int i = 1; i <= n; i++) {
        if (s[i] == 'J') chmin(ans, calc(i, cnt));
    }
    if (ans == 1 << 30) ans = k * 3 - 1;
    cout << ans - k * 3 << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...