编程题
### 问题描述 小然有一个二进制字符串 $S$。他发明了一台时间机器,这台机器每秒钟会对 $S$ 进行以下操作: 如果 $S_i$ 等于 $1$,依次进行如下操作: 1. 将 $S_i$ 变为 $0$。 2. 如果 $ S_{i-1}$ 存在并且等于 $0$,将它变为 $1$。 3. 如果 $ S_{i+1}$ 存在并且等于 $0$,将它变为 $1$。 **注意:所有位的变化是同时发生的**。 例如,如果初始的 $S = 010$,那么一秒钟后,$S$ 将变为 $101$(因为第二位是 1,所以它变为 0,并且它的两个邻居都从 0 变为 1)。再过一秒钟,$S$ 将变回 $010$。这是因为第一位和第三位都是 1,所以它们都变为 0,而第二位是 0,且它的两个邻居都是 1,所以它变为 1。 现在,小然想要知道在经过 $K$ 秒钟后,$S$ 将变为什么。请你帮助小然找出答案。 ### 输入格式 输入的第一行包含一个整数 $T$,表示测试用例的数量。 每个测试用例由两行组成: - 第一行包含两个空格分隔的整数 $N$ 和 $K$,表示二进制字符串的长度和时间机器工作的秒数。 - 第二行是一个长度为 $N$ 的二进制字符串 $S$。 ### 输出格式 对于每个测试用例,输出一行一个二进制字符串,表示经过 $K$ 秒钟后的 $S$。 ### 样例输入 ```text 3 3 1 101 5 2 10001 14 3 10011010111000 ``` ### 样例输出 ```text 010 10101 01100101010101 ``` ### 说明 在第一个测试用例中,经过一秒钟后,$S$ 变为 $010$。 在第二个测试用例中,经过一秒钟后,$S$ 变为 $01010$,再经过一秒钟,$S$ 变为 $10101$。 ### 评测数据范围 $1 \leq T \leq 1000$。 $1 \leq N \leq 10^5$。 $1 \leq K \leq 10^9$。 每个测试样例 $N$ 的总和不超过 $10^6$。
查看答案
赣ICP备20007335号-2