C. 异或(xor.cpp)
内存限制:256 MiB
时间限制:1000 ms
标准输入输出
题目类型:传统
评测方式:文本比较
题目描述
给定一个长度为 n 的数组 A,其中 0≤ < 求有多少对(l,r)(l≤r)使得序列 , ,... 的异或和为 0。
如果仅仅是这样那这道题目就太简单了。所以在检查(l,r)是否满足条件时, 允许你对 A 中下标从 l 到 r 的每个数字进行任意次修改,每次修改为交换数字的 相邻两个二进制位。求有多少对(l,r)(l≤r)使得序列 , ,... 中 的每一个数字经过任意次修改后异或和为 0。
输入格式
第一行包含一个整数 n(1≤n≤ 100000) 接下来的一行每行包含 n 个整数,表示数组 A。
输出格式
输出一个整数,表示满足条件的数对个数。
样例
输入 #1
3
1 2 3
输出 #1
2
数据范围与提示
样例解释: (1,2)和(1,3)满足条件 (1,1)(2,2)(3,3)(2,3)均不满足条件
对于 30% 的数据,满足 n ≤ 10。
对于 60% 的数据,满足 n ≤ 1000。
对于另外 20%的数据,满足 0≤ < 25
对于 100% 的数据,满足 1≤n≤100000,0≤ < 230