[2020牛客寒假算法基础集训营1]H-nozomi和字符串
这道题跟我之前做过的这道题十分像。直接就改改拿过来用了。
就是将每个0的下标记录。尽量完成k次的变换。那么所获得对于每个变换位置尽量长的11串的长度表示就是 v0[i + m] - v0[i - 1] - 1了
记得特判k大于等于0的数量的情况。
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main() { int n, m, pre = 0, cur = 0, numa = 0, numb = 0; cin >> n >> m; char c; string s; int ii = n; while (ii--) { cin >> c; s += c; } vector<int> v0, v1;//分别存0的下标,1的下标 for (int i = 0; i < n; i++) { if(s[i] == '0') v0.push_back(i); if(s[i]== '1') v1.push_back(i); } if (v0.size() <= m) { cout << n << endl; return 0; } vector<int> res; res.push_back(v0[0 + m]); for (int i = 1; i + m < v0.size(); i++) { res.push_back(v0[i + m] - v0[i - 1] - 1); } sort(res.begin(), res.end()); cout << res[res.size() - 1] << endl; return 0; }