编程题
### 问题描述 在一个遥远的星系里,小然在追逐一种神秘的编码,他发现这种编码密切关联着星系的安全。这种编码由一串二进制字符串 $S$ 表示,长度为 $N$。小然可以通过一种叫做 "翻转" 的操作来改变这个编码的状态。每次操作,他可以选择字符串 $S$ 的一个前缀,并将其所有字符翻转。在这里,“翻转”意味着将 $0$ 变为 $1$,将 $1$ 变为 $0$。 然而,这个操作并不容易进行,小然需要花费大量的精力。因此,他希望尽可能地减少操作的次数。现在,他的目标是找到一个长度为 $K$ 的子串,使得这个子串中的所有字符都是 $1$。 你的任务是帮助小然找到实现这个目标的最小操作次数。 ### 输入格式 输入的第一行包含一个整数 $T$,表示测试用例的数量。 每个测试用例由两行组成: 第一行包含两个空格分隔的整数 $N$ 和 $K$ —— 字符串的长度和我们想要达到的所有字符都是 $1$ 的子串的长度。 第二行包含一个长度为 $N$ 的二进制字符串 $S$。 ### 输出格式 对每个测试用例,输出一行表示实现目标的最小操作次数。 ### 样例输入 ```text 3 3 3 000 4 2 0110 5 3 10101 ``` ### 样例输出 ```text 1 0 2 ``` ### 说明 测试用例 1:我们需要得到一个包含三个 $1$ 的子串。通过一次操作,我们可以选择前缀 $S[1,3]$ 并翻转所有字符,因此字符串变为 $111$。 测试用例 2:字符串已经包含一个有两个 $1$ 的子串,因此我们不需要进行任何操作。 测试用例 3:我们需要得到一个包含三个 $1$ 的子串。我们可以通过两次操作实现: - 操作 1:选择前缀 $S[1,4]$ 并翻转所有字符,因此字符串变为 $01011$。 - 操作 2:选择前缀 $S[1,3]$ 并翻转所有字符,因此字符串变为 $10111$。 因此,我们有一个长度为 $3$ 的子串 $S[3,5]$,其中所有字符都是 $1$。可以证明我们不能用少于 $2$ 次操作得到这样的子串。 ### 评测数据范围 $1 \leq T \leq 2000$。 $1 \leq K \leq N \leq 3 \times 10^5$。 $S$ 仅由 $0$ 和 $1$ 组成。 所有测试用例中的 $N$ 的总和不超过 $3 \times 10^5$。
查看答案
赣ICP备20007335号-2