编程题
### 问题描述 大衣有一个长度为 $N$ 的二进制字符串 $S$ 和一个整数 $K​$,他可以对该字符串进行如下操作: - 选择字符串 $S$ 的一段前缀,然后将该前缀的所有字符翻转。翻转操作是将字符 $0$ 变为 $1$,字符 $1$ 变为 $0$。 大衣想让最终的字符串包含一个长度为 $K​$ 的子串,并且该子串的所有字符都为 $1​$,请你找出满足条件的最小的操作次数。 ### 输入格式 第一行输入一个正整数 $T$ 表示测试数据的组数。 接下来 $T$ 组测试数据每组输入两行: - 第一行输入两个正整数 $N,K$ 分别表示字符串的长度和字符全为 $1$ 的子串的长度。 - 第二行输入一个长度为 $N$ 的二进制字符串 $S​$。 ### 输出格式 对于每组测试数据,输出满足条件的最小的操作次数,并换行。 ### 样例输入 ```text 3 3 3 000 4 2 0110 5 3 10101 ``` ### 样例输出 ```text 1 0 2 ``` ### 说明 样例 $1$:我们需要得到一个长度为 $3$ 的仅包含字符 $1$ 的子串,可以选择前缀 $S[1,3]$,然后将其翻转,字符串 $S$ 变成 $111$,此时子串 $S[1,3]$ 已经满足题目要求。 样例 $2$:字符串 $S=0110$ 已经包含一个长度为 $2$ 且仅包含字符 $1​$ 的子串,故不需要操作。 样例 $3$:我们需要得到一个长度为 $3$ 的仅包含字符 $1$ 的子串,可以进行以下 $2$ 次操作: - 选择前缀 $S[1,4]$,然后将其翻转,字符串 $S$ 变成 $01011​$。 - 选择前缀 $S[1,3]$,然后将其翻转,字符串 $S$ 变成 $10111​$。 此时子串 $S[3,5]$ 已经满足题目要求,可以证明没有比 $2​$ 更小的操作次数。 ### 评测数据规模 对于所有的评测数据,$1\le T\le 20$,$1\le K\le N\le 10^4$,二进制字符串 $S$ 仅包含字符 $0$ 和 $1$。
查看答案
赣ICP备20007335号-2