编程题
### 问题描述 小然正在玩一款二进制积分游戏。他有一个长度为 $N$ 的二进制数组 $A$。 在一次操作中,小然可以: 1. 选择一个子串 $A_{L...R}$,其中 $1 \leq L < R \leq |A|$,并计算出这个子串的异或和,然后将这个异或和加到他的得分中。 2. 移除这个子串 $A_{L...R}$,并将剩下的部分连接在一起。 小然可以进行任意多次这样的操作,他的目标是使得最后的得分最大。 请你帮助小然找出在最优策略下,他能得到的最大得分。 ### 输入格式 输入的第一行包含一个整数 $T$,表示测试用例的数量。 每个测试用例由两行组成: - 第一行包含一个整数 $N$,表示二进制数组的长度。 - 第二行包含一个长度为 $N$ 的二进制字符串,由 0 和 1 组成。 ### 输出格式 对于每个测试用例,输出一行一个整数,表示小然能得到的最大得分。 ### 样例输入 ```text 3 5 1 0 0 0 1 3 1 1 1 3 0 0 0 ``` ### 样例输出 ```text 2 1 0 ``` ### 说明 在第一个测试用例中,我们可以进行以下操作: - 选择子串 $A_{1...3} = 100$,得分增加 $1$ 分,然后移除这个子串,数组变为 $A = [0,1]$。 - 选择子串 $A_{1...2} = 01$,得分增加 $1$ 分,然后移除这个子串,数组变为空。总得分为 $2$ 分。 ### 评测数据范围 $1 \leq T \leq 10^3$。 $1 \leq N \leq 10^5$。 $A_i \in \textbraceleft0,1 \textbraceright$。 所有测试用例中 $N$ 的总和不超过 $10^5$。
查看答案
赣ICP备20007335号-2