我打败了一半的人!!!!
2025-07-14 09:42:08
发布于:浙江
22阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, m;
string s;
cin >> n >> m >> s;
if (n == 1) {
cout << 0 << endl;
return 0;
}
int D = 0;
for (int i = 0; i < n - 1; ++i) {
if (s[i] != s[i + 1]) {
D++;
}
}
vector<int> L2;
for (int l = 1; l < n; ++l) {
if (s[l] == '0' && s[l - 1] == '1') {
L2.push_back(l);
}
}
vector<int> R2;
for (int r = 0; r < n - 1; ++r) {
if (s[r] == '1' && s[r + 1] == '0') {
R2.push_back(r);
}
}
int k2 = 0, rb = 0, la = 0;
int i = 0, j = 0;
while (i < L2.size() && j < R2.size()) {
int l = L2[i], r = R2[j];
if (l < r) {
k2++;
if (r > 0) rb++;
if (l < n - 1) la++;
i++;
j++;
} else {
j++;
}
}
int cntA = 0;
if (s[0] == '0') {
int ra = 0;
for (int r : R2) {
if (r > 0) ra++;
}
cntA = max(0, ra - rb);
}
int cntB = 0;
if (s.back() == '1') {
int lb = 0;
for (int l : L2) {
if (l < n - 1) lb++;
}
cntB = max(0, lb - la);
}
int k1 = cntA + cntB;
int use2 = min(m, k2);
int total_reduce = use2 * 2;
int remaining = m - use2;
if (remaining > 0) {
total_reduce += min(remaining, k1) * 1;
}
int min_degree = max(0, D - total_reduce);
cout << min_degree << endl;
return 0;
}
这里空空如也
有帮助,赞一个