CF1109A Sasha and a Bit of Relax

题目描述

Sasha 喜欢编程。有一次,在一场非常漫长的比赛中,Sasha 觉得有点累了,需要放松一下。于是他决定休息一下。但由于 Sasha 并不是一个普通的人,他喜欢用不同寻常的方式放松。在休息时间,Sasha 喜欢补做未解决的问题,因为补题非常有用。 因此,Sasha 决定补做如下问题: 给定一个长度为 $n$ 的整数数组 $a$。你需要统计有多少对有趣的区间对 $(l, r)$(满足 $l \leq r$)。判断一对 $(l, r)$ 是否为有趣对的方法如下:令 $mid = \frac{l + r - 1}{2}$,如果 $r - l + 1$ 是偶数,并且 $a_l \oplus a_{l+1} \oplus \ldots \oplus a_{mid} = a_{mid + 1} \oplus a_{mid + 2} \oplus \ldots \oplus a_r$,那么这对就是有趣对。换句话说,从 $l$ 到 $r$ 的子数组的左半部分所有元素的异或值等于右半部分所有元素的异或值。注意,$\oplus$ 表示[按位异或运算](https://en.wikipedia.org/wiki/Bitwise_operation#XOR)。 现在是继续比赛的时候了,所以 Sasha 请你帮他解决这个问题。

输入格式

第一行包含一个整数 $n$($2 \le n \le 3 \cdot 10^5$)——数组的长度。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($0 \le a_i < 2^{20}$)——数组本身。

输出格式

输出一个整数,表示有趣对的数量。你只需要考虑 $r - l + 1$ 为偶数的区间对。

说明/提示

像 Sasha 一样酷,补题吧! 在第一个样例中,唯一的有趣对是 $(2, 5)$,因为 $2 \oplus 3 = 4 \oplus 5 = 1$。 在第二个样例中,有趣对为 $(2, 3)$、$(1, 4)$ 和 $(3, 6)$。 在第三个样例中,没有有趣对。 由 ChatGPT 4.1 翻译