nozomi和字符串
https://ac.nowcoder.com/acm/contest/3002/H
图片说明

字符串,贪心
分为两种情况处理:1->0 0->1
分别记录0和1的位置,然后只更改0或1(都改岂不是白浪费2次?)
距离为 所更改的第一个1之前的一个1所在位置+1,
到第k个1之后的一个1所在位置-1,之间的距离。
所以一开始vector直接push_back(-1)和最后一步push_back(n)
字符串位置是从 0到n-1
-1+1=0 n-1=n-1

#pragma warning (disable :4996)
#include <iostream>
#include <cstdio>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll modd = 1e9 + 7;
vector<int> v0, v1;
char S[200010];
int main() {
    int n, k;
    scanf("%d %d", &n, &k);
    getchar();
    scanf("%s", S);

    v0.push_back(-1);
    v1.push_back(-1);
    for (int i = 0; i < n; i++) {
        if (S[i] == '0')
            v0.push_back(i);
        else
            v1.push_back(i);
    }
    v0.push_back(n);
    v1.push_back(n);

    int maxn = 0;
    if (v0.size() - 2 <= k)
        maxn = n;
    else { //0->1
        for (int i = 1, j = k; j < v0.size()-1; i++, j++) {
            //把第v0[i]到v0[j]之间的0全改为1
            //v0[j+1]->最后一个1的后一位  v0[j+1]-1为最后一个1
            //v0[i-1]->第一个1的前一位   v0[i-1]+1为第一个1
            //v0[j+1]-1-(v0[i-1]+1)+1
            maxn = max(maxn, v0[j + 1] - v0[i-1] - 1);
        }
    }
    if (v1.size() - 2 <= k)
        maxn = n;
    else {//1->0
        for (int i = 1, j = k; j < v1.size()-1; i++, j++) {
            maxn = max(maxn, v1[j + 1] - v1[i - 1] - 1);
        }
    }
    cout << maxn << endl;

}