A-路灯维修(lamp)
题目背景
城市管理中心正在检查一条笔直道路上的路灯工作情况。
这条道路上共有 n 盏路灯,从左到右编号为 1 到 n。
每盏路灯当前只有两种状态:
为了让夜间道路尽可能明亮,维修队最多可以修好 k 盏坏灯。你的任务是计算: 经过最多 k 次维修后,最长连续亮灯段的长度是多少。
题目描述
给定一个长度为 n 的仅由 0 和 1 组成的字符串 s,其中:
- si=1 表示第 i 盏路灯是亮的;
- si=0 表示第 i 盏路灯是坏的。
你最多可以把其中 k 个 0 改成 1。
请输出修改后,字符串中最长连续 1 子串的最大长度。
输入格式
第一行输入两个整数 n,k,分别表示路灯数量和最多可维修的坏灯数量。
第二行输入一个长度为 n 的字符串 s,只包含字符 0 和 1。
输出格式
输出一个整数,表示最多维修 k 盏坏灯后,最长连续亮灯段的最大长度。
输入输出样例
输入 #1
10 2
1100010111
输出 #1
6
样例解释
原串为:
1100010111
我们最多可以修好 2 盏坏灯。
观察区间第 5 盏到第 10 盏路灯,对应子串为: 010111 ,这个区间中恰好有 2 个 0,因此可以把这两个坏灯全部修好,变成: 111111 ,于是可以得到一段长度为 6 的连续亮灯段。
数据范围
对于所有测试数据,保证:$1 \le n \le 2 \times 10^5,\quad 0 \le k \le n,\quad s_i \in {0,1}$
本题共设 20 个测试点,各测试点满足的限制如下:
| 测试点编号 |
分值 |
n |
k |
特殊性质 |
| 1 |
5 |
=1 |
=0 |
无特殊性质 |
| 2 |
≤10 |
A |
| 3 |
≤n |
无特殊性质 |
| 4 |
≤20 |
B |
| 5 |
C |
| 6 |
≤100 |
=1 |
D |
| 7 |
≤2 |
E |
| 8 |
≤n |
F |
| 9 |
≤1000 |
=0 |
A |
| 10 |
≤5 |
无特殊性质 |
| 11 |
≤n |
| 12 |
≤5000 |
| 13 |
≤104 |
=1 |
D |
| 14 |
≤2×104 |
≤10 |
无特殊性质 |
| 15 |
≤5×104 |
≤n |
F |
| 16 |
≤105 |
B |
| 17 |
C |
| 18 |
≤1.5×105 |
=n |
G |
| 19 |
≤2×105 |
=0 或 =n |
A 或 G |
| 20 |
≤n |
无特殊性质 |
特殊性质 A:保证 k=0。
特殊性质 B:保证字符串 s 中所有字符均为 1。
特殊性质 C:保证字符串 s 中所有字符均为 0。
特殊性质 D:保证 k=1。
特殊性质 E:保证 0≤k≤2。
特殊性质 F:保证字符串 s 呈交替形式,即对任意 1≤i<n,都有 si=si+1。
特殊性质 G:保证 k=n。