石子与异或
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
33DAI 面前有 堆石子排成一行,第 堆有 颗。
给定一个长度为 的序列 。称 ()是一个
连续子段,它的异或和为 ,
其中 表示按位异或:把两个整数写成二进制后逐位比较,该位相同则结果的这一位是 ,不同则是 。在 C++ 中,按位异或写成 ^(例如 a ^ b)。
记正整数 的正因子个数为 。特别地,本题规定 的正因子个数是奇数 (可以理解为 的因子个数“不是偶数”)。
33DAI 想知道:有多少个连续子段,满足其异或和 的 是偶数?
本题有多组测试数据。
输入格式
从文件 xor.in 读入数据。
输入的第一行包含一个正整数 ,表示测试数据组数。
接下来依次给出 组数据,每组数据的格式为:
第一行包含一个整数 ,表示序列长度。
第二行包含 个整数 ,相邻两个整数之间用一个空格分隔。
输出格式
输出到文件 xor.out。
对于每组数据,输出一行一个整数,表示异或和的正因子个数为偶数的连续子段数量。
4
3
3 1 2
5
4 2 1 5 3
4
4 4 4 4
7
5 7 3 7 1 7 3
4
11
0
20
样例 1 解释
第一组数据:全部 个连续子段中,、、、 这 个的异或和分别是 ,正因子个数都是偶数;而 的异或和是 , 的异或和是 , 按本题规定它们的正因子个数都是奇数,不计入答案。
第三组数据:没有连续子段满足条件,答案为 。
样例 2
样例 3
数据范围
对于所有测试数据,保证:
- ;
- ;
- ;
- 单个测试文件中所有测试用例的 之和不超过 。
子任务
本题共 20 个测试点,按测试点计分:
| 测试点 | 分值 | 每个测试点 | 特殊限制 |
|---|---|---|---|
| ,单个测试文件 | |||
| 无额外限制 |
每个测试点单独评分,全部测试点的得分之和即为本题得分。