不知道为什么昨天 ARC 的第二题 WA 了11个测试点,请大佬帮帮吧! 给出来 hack 数据也可以!感谢!
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <sstream>
using namespace std;
const int N = 2e5 + 5;
int jian[N], c;
int main() {
int n, k;
string s;
cin >> n >> k;
cin >> s;
int cnt = 0;
bool f = 0;
int bf = 0;
int now = 0;
bool g = 0;
for (int i = 0; i < s.size(); i++) {
if (i != 0 && s[i] == 'X' && s[i - 1] == 'Y') {
c++;
bf += now - 1;
}
if (s[i] == 'X') {
now = 0;
cnt++;
} else {
f = 1;
now++;
}
if (f) {
if (s[i] == 'X') {
jian[c]++;
}
}
}
c--;
if (cnt < k) {
int cc = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == 'X') {
s[i] = 'Y';
cc++;
} else {
s[i] = 'X';
}
}
k -= cc;
cnt = 0;
f = 0;
bf = 0;
now = 0;
c = 0;
memset(jian, 0, sizeof(jian));
for (int i = 0; i < s.size(); i++) {
if (i != 0 && s[i] == 'X' && s[i - 1] == 'Y') {
c++;
bf += now - 1;
}
if (s[i] == 'X') {
now = 0;
cnt++;
} else {
f = 1;
now++;
}
if (f) {
if (s[i] == 'X') {
jian[c]++;
}
}
}
c--;
k = cnt - k;
}
for (int i = 0; i < s.size(); i++) {
if (s[i] == 'Y') g = 1;
}
if (!g) {
cout << max(k - 1, 0) << endl;
return 0;
}
sort(jian, jian + c + 1);
//cout << k << ' ' << s << ' ' << cnt << endl;
if (cnt == k) cout << n - 1;
else if (cnt > k) {
//cout << 111 << endl;
int cnt1 = cnt;
int l = 0, r = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == 'X') {
cnt1--;
}
if (s[i] == 'Y') {
l = i;
break;
}
}
for (int i = s.size() - 1; i >= 0; i--) {
if (s[i] == 'X') {
cnt1--;
}
if (s[i] == 'Y') {
r = i;
break;
}
}
if (cnt1 == k) {
cout << r - l;
} else if (cnt1 < k) {
cout << r - l + (k - cnt1);
} else {
//cout << 111 << endl;
int add = 0;
for (int j = 1; j <= c; j++) {
if (k < jian[j]) break;
else {
k -= jian[j];
add += jian[j] + 1;
}
}
add += k;
cout << bf + add << endl;
}
}
return 0;
}