编程题
### 问题描述 小蓝正在研究一些数字统计问题。有一天他突然看到了一个这样的问题,将区间 $[L..R]$ 中的所有整数用 $M$ 位二进制数表示(允许出现前导 0)。现在将这些数中的每一个作如下变换,从这个数的最低两位开始,如果这两位都是 0,那么 $X=1$,否则 $X=0$。现在将这两位删去,然后将 $X$ 放在原来最低位的位置上。重复这个变换直到这个数只剩下一位为止。 例如 $01001$ 的变换过程如下: $01001\rightarrow 0100\rightarrow 011\rightarrow 00\rightarrow 1$。 现在的问题是变换后的所有数中,值为 $Y$($Y$ 为 $0$ 或 $1$)的有多少个?小蓝不会了,他想让你帮助他完成这个问题。 ### 输入格式 输入文件包含多组测试数据。 第一行,一个整数 $T$,表示测试数据的组数。 每组测试数据包含两行,格式如下: 第一行,两个整数 $M$ 和 $Y$。 第二行,两个 $M$ 位二进制数 $L$ 和 $R$。 ### 输出格式 对于每组测试数据,输出一行,一个二进制数,表示该组测试数据中 $[L..R]$ 中的所有整数变换后的值为 $Y$ 的个数。这里的二进制数不允许出现前导 $0$。 ### 样例输入 ```text 1 3 1 001 101 ``` ### 样例输出 ```text 11 ``` ### 评测数据规模 对于 $20\\%$ 的数据, $1\leq M\leq 16$。 对于 $40\\%$ 的数据, $1\leq M\leq 32$。 对于 $100\\%$ 的数据, $1\leq M\leq 200$, $1\leq T\leq 50$。
查看答案
赣ICP备20007335号-2