#include <bits/stdc++.h>
using namespace std;
int n, k;
char s[200011];
int ypos[200011], tot, dtot;
struct D {
int l, r, va;
bool first;
} d[200011];
bool fd[200011];
bool cmp(const D &a, const D &b) {
if (b.l == 0 || b.r == n + 1) return 1;
if (a.l == 0 || a.r == n + 1) return 0;
return a.va < b.va;
}
int main() {
scanf("%d%d%s", &n, &k, s + 1);
//printf("\n%d", cmp({0, 2, 1}, {4, 7, 2}));
//exit(0);
if (k == 0) {
for (int i = 1; i < n; ++i) {
if (s[i] == s[i + 1] && s[i] == 'Y') ++tot;
}
printf("%d", tot);
return 0;
}
for (int i = 1; i <= n; ++i) {
if (s[i] == 'Y') {
ypos[++tot] = i;
}
}
if (tot == 0) {
printf("%d", k - 1);
return 0;
}
for (int i = 1; i < tot; ++i) {
if (ypos[i + 1] - ypos[i] - 1 == 0) continue;
++dtot;
d[dtot].l = ypos[i];
d[dtot].r = ypos[i + 1];
d[dtot].va = ypos[i + 1] - ypos[i] - 1;
d[dtot].first = 1;
}
sort(d + 1, d + dtot + 1, cmp);
if (ypos[1] - 1) {
++dtot;
d[dtot].l = 0;
d[dtot].r = ypos[1];
d[dtot].va = ypos[1] - 1;
d[dtot].first = 0;
}
if (ypos[tot] != n) {
++dtot;
d[dtot].l = ypos[tot];
d[dtot].r = n + 1;
d[dtot].va = n + 1 - ypos[tot] - 1;
d[dtot].first = 0;
}
//for (int i = 1; i <= dtot; ++i) {
// printf("%d %d %d\n", d[i].l, d[i].r, d[i].va);
//}
for (int i = 1; i <= dtot && k; ++i) {
for (int j = d[i].l + 1; j < d[i].r && k; ++j) {
//assert(s[j] == 'X');
s[j] = 'Y';
fd[j] = 1;
--k;
}
}
int res = 0;
for (int i = 1; i < n; ++i) {
if (s[i] == s[i + 1] && s[i] == 'Y') {
++res;
}
}
// puts(s + 1);
if (k == 0) {
printf("%d", res);
return 0;
}
if (fd[1] == 0) {
s[1] = 'X';
--res;
--k;
}
if (fd[n] == 0 && k) {
s[n] = 'X';
--res;
--k;
}
for (int i = 2; i < n && k; ++i) {
if (!fd[i]) {
s[i] = 'X';
--k;
if (s[i - 1] == 'Y') --res;
if (s[i + 1] == 'Y') --res;
}
}
printf("%d", res);
return 0;
}/*
10 5
XYXYXXYYYX*/
https://atcoder.jp/contests/arc157/submissions/39207198
会不会就是最后那一段代码的问题? |