编程题
### 问题描述 小然在进行一项二进制寻宝任务。他有一个长度为 $N$ 的二进制字符串 $S$。 他的任务是从中找到两个等长的子串,使得他们的异或值最大。 更具体地说,小然需要找到四个整数 $L1$、$R1$、$L2$、$R2$,满足: - $1 \leq L1 \leq R1 \leq N$ 和 $1 \leq L2 \leq R2 \leq N$; - $|(R1 - L1 + 1)| = |(R2 - L2 + 1)|$,即两个子串的长度相等; - $S_{L1...R1} \oplus S_{L2...R2}$ 的值最大,其中 $\oplus$ 表示异或操作。 请你帮助小然完成这项任务,找到最大的异或值,并以十进制形式输出。由于最大异或值可能很大,请你输出它模 $10^9 + 7$ 的结果。 注意,一个字符串的子串是通过从字符串的头部和/或尾部删除一些(可能为零或全部)字符得到的。 ### 输入格式 输入的第一行包含一个整数 $T$,表示测试用例的数量。 每个测试用例由两行组成: - 第一行包含一个整数 $N$,表示二进制字符串的长度。 - 第二行包含一个长度为 $N$ 的二进制字符串,由 0 和 1 组成。 ### 输出格式 对于每个测试用例,输出一行一个整数,表示最大的异或值模 $10^9 + 7$ 的结果。 ### 样例输入 ```text 3 4 1010 5 11111 3 011 ``` ### 样例输出 ```text 7 0 2 ``` ### 说明 在第一个测试用例中,我们可以选择 $L1 = 1, R1 = 3, L2 = 2, R2 = 4$。这样,选出的子串是 $101$ 和 $010$,它们的异或值是 $111$,对应的十进制数是 $7$。 在第二个测试用例中,无论我们如何选择,得到的异或值都是 $0$。 在第三个测试用例中,我们可以选择 $L1 = 1, R1 = 2, L2 = 2, R2 = 3$。这样,选出的子串是 $01$ 和 $11$,它们的异或值是 $10$,对应的十进制数是 $2$。 ### 评测数据范围 $1 \leq T \leq 10^3$。 $2 \leq N \leq 10^6$。 所有测试用例中 $N$ 的总和不超过 $2 \times 10^6$。
查看答案
赣ICP备20007335号-2