编程题
### 问题描述
在一个遥远的星系里,小然在追逐一种神秘的编码,他发现这种编码密切关联着星系的安全。这种编码由一串二进制字符串 $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$。