题目:给你一个01串,定义答案=该串中最长的连续为1的长度,现在你有至多k次机会,每次机会可以将串中的某个0改成1,现在问最大可能答案。
输入:
输入第一行的两个整数N,k,表示字符串长度和机会次数
第二行输入N个整数,表示该字符串的元素
输出
输出一行表示答案
样例输入
10 2
1 0 0 1 0 1 0 1 0 1
样例输出
5
result:
#include<iostream>
#include<vector>
using namespace std;
vector<int> find0_index(vector<int> v)
{
vector<int> temp;
for (int i = 0; i < v.size(); i++)
{
if (v[i] == 0)
temp.push_back(i);
}
return temp;
}
int findMax(vector<int> v)
{
int max = 0;
for (int i = 0; i < v.size(); i++)
{
int temp = 0;
if (v[i] == 1)
for (int j = i; j < v.size(); j++)
if (v[j] == 1)
temp++;
else
{
i = j;
break;
}
max = (max > temp ? max : temp);
}
return max;
}
vector<int> update(vector<int> v, int start, int k, vector<int> v0)
{
vector<int> temp = v;
for (int i = 0; i < k; i++)
{
temp[v0[start + i]] = 1;
}
return temp;
}
int main()
{
int N, k, res = 0;
vector<int> v, temp, temp1;
cin >> N >> k;
for (int i = 0; i < N; i++)
{
int temp;
cin >> temp;
v.push_back(temp);
}
temp = find0_index(v);
for (int i = 0; i <= (temp.size() - k); i++)//可以优化
{
int temp3;
temp1 = update(v, i, k, temp);
temp3 = findMax(temp1);
res = (res > temp3 ? res : temp3);
}
cout << res;
return 0;
}s