#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n, k, c[N][3];
char a[N];
vector<int> v[3];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i];
copy(c[i - 1], c[i - 1] + 3, c[i]);
if (a[i] == 'J') c[i][0]++, v[0].push_back(i);
if (a[i] == 'O') c[i][1]++, v[1].push_back(i);
if (a[i] == 'I') c[i][2]++, v[2].push_back(i);
}
v[0].push_back(n + 1);
v[1].push_back(n + 1);
v[2].push_back(n + 1);
int res = N;
for (int i = 1; i <= n; i++) {
if (a[i] != 'J') continue;
int l = i, r = n;
while (l <= r) {
int m = (l + r) >> 1;
if (c[m][0] - c[i - 1][0] >= k) r = m - 1;
else l = m + 1;
}
if (l > n) continue;
l = v[1][lower_bound(v[1].begin(), v[1].end(), l) - v[1].begin()];
int l2 = l, r2 = n;
while (l2 <= r2) {
int m = (l2 + r2) >> 1;
if (c[m][1] - c[l - 1][1] >= k) r2 = m - 1;
else l2 = m + 1;
}
if (l2 > n) continue;
l2 = v[2][lower_bound(v[2].begin(), v[2].end(), l2) - v[2].begin()];
int l3 = l2, r3 = n;
while (l3 <= r3) {
int m = (l3 + r3) >> 1;
if (c[m][2] - c[l2 - 1][2] >= k) r3 = m - 1;
else l3 = m + 1;
}
if (l3 > n) continue;
res = min(res, l3 - i + 1 - 3 * k);
}
cout << (res == N ? -1 : res);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |