#4515. 区间异或和统计

区间异或和统计

题目描述

给定一个长度为 nn 的数列 aa 和一个整数 KK,请求出有多少个连续子区间的异或和恰好等于 KK。

一个区间 [l,r][l, r] 的异或和定义为 al⊕al+1⊕⋯⊕ara_l \oplus a_{l+1} \oplus \cdots \oplus a_r,其中 ⊕\oplus 表示按位异或运算(C++ 中为 ^ 运算符)。单点区间(l=rl = r)也算在内。

输入格式

第一行两个整数 n,Kn, K。

第二行 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n。

输出格式

输出一行一个整数,表示异或和等于 KK 的连续子区间的个数。

说明/提示

样例解释

数列为 1,2,3,11, 2, 3, 1,K=3K = 3,符合条件的连续子区间有:

  • 区间 [1,2][1, 2]:1⊕2=31 \oplus 2 = 3;
  • 区间 [3,3][3, 3]:33。

共 22 个,其余区间均不符合。

数据规模与约定

对于 100%100\% 的数据,保证 1≤n≤1051 \le n \le 10^5,0≤K<2200 \le K < 2^{20},0≤ai<2200 \le a_i < 2^{20}。

答案可能很大,请使用 long long 存储。

本题为本校训练自编题(参照经典题型)。