题目描述
给定一个长度为 n 的数列 a 和一个整数 K,请求出有多少个连续子区间的异或和恰好等于 K。
一个区间 [l,r] 的异或和定义为 al⊕al+1⊕⋯⊕ar,其中 ⊕ 表示按位异或运算(C++ 中为 ^ 运算符)。单点区间(l=r)也算在内。
输入格式
第一行两个整数 n,K。
第二行 n 个整数 a1,a2,…,an。
输出格式
输出一行一个整数,表示异或和等于 K 的连续子区间的个数。
说明/提示
样例解释
数列为 1,2,3,1,K=3,符合条件的连续子区间有:
- 区间 [1,2]:1⊕2=3;
- 区间 [3,3]:3。
共 2 个,其余区间均不符合。
数据规模与约定
对于 100% 的数据,保证 1≤n≤105,0≤K<220,0≤ai<220。
答案可能很大,请使用 long long 存储。
本题为本校训练自编题(参照经典题型)。