#include <iostream>
#include <string>
using namespace std;
const int N = 2e5 + 10;
int n, k, a[N][3];
string s;
int main() {
cin.tie(0); cout.tie(0);
ios_base::sync_with_stdio(false);
cin >> n >> k >> s;
s = " " + s;
for (int i = 1; i <= n; ++i) {
for (int j = 0; j < 3; ++j) a[i][j] = a[i - 1][j];
if (s[i] == 'J') ++a[i][0];
else if (s[i] == 'O') ++a[i][1];
else ++a[i][2];
}
int ans = N, l, r, mid, nxt, last;
for (int i = 1; i <= n; ++i) {
last = i - 1;
l = i, r = n, nxt = -1;
while (l <= r) {
mid = (l + r) >> 1;
if (a[mid][0] - a[last][0] >= k) {
r = mid - 1;
nxt = mid;
} else {
l = mid + 1;
}
}
if (nxt == -1) continue;
last = nxt;
l = nxt + 1, r = n, nxt = -1;
while (l <= r) {
mid = (l + r) >> 1;
if (a[mid][1] - a[last][1] >= k) {
r = mid - 1;
nxt = mid;
} else {
l = mid + 1;
}
}
if (nxt == -1) continue;
last = nxt;
l = nxt + 1, r = n, nxt = -1;
while (l <= r) {
mid = (l + r) >> 1;
if (a[mid][2] - a[last][2] >= k) {
r = mid - 1;
nxt = mid;
} else {
l = mid + 1;
}
}
if (nxt == -1) continue;
ans = min(ans, nxt - i + 1 - 3 * k);
}
if (ans == N) ans = -1;
cout << ans << "\n";
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |