酷代码 AI
菜单
服务商

C++ 实现:求解二进制字符串中消除连续 m 个 0 的最少操作次数

首先,我们需要找到所有连续的0的片段,并记录它们的长度。 然后,我们可以遍历这些片段,对于每个长度大于等于m的片段,我们将其分成若干长度为k的子片段,并将它们全部变成1。操作的次数就是子片段的个数。 下面是一个示例的C++代码实现: ```cpp #include <iostream> #include <vector> #include <string> using namespace std; int main() { int t; cin >> t; while (t--) { int n, m, k; cin >> n >> m >> k; string s; cin >> s; int count = 0; vector<int> lengths; // 保存所有连续的0片段的长度 int currLength = 0; for (int i = 0; i < n; i++) { if (s[i] == '0') { currLength++; } else { if (currLength > 0) { lengths.push_back(currLength); count += currLength / k; } currLength = 0; } } if (currLength > 0) { lengths.push_back(currLength); count += currLength / k; } // 处理长度大于等于m的片段 for (int i = 0; i < lengths.size(); i++) { if (lengths[i] >= m) { count -= lengths[i] / k; } } cout << count << endl; } return 0; } ``` 希望可以帮助到你! ######[AI写代码神器 | 876点数解答 | 2024-11-30 23:07:54]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]