100
#LS1268. 【提高】异或序列

【提高】异或序列

[提高] 异或序列

有一个长度为 nn 的序列 aa ,序列中的每个值在 [0,1024][0, 1024] 之间。

请你求出这个序列有多少对连续子序列 (A,B)(A, B) ,满足 AABB 之前,且 A,BA, B 中所有元素的异或和为 mm

简单来说,你需要求出有多少个四元组 (l1,r1,l2,r2)(l_1, r_1, l_2, r_2) ,满足 l1r1<l2r2l_1 \leq r1 < l_2 \leq r2,且

$$(\bigoplus^{r_1}_{i=l_1}a_i)\bigoplus(\bigoplus^{r_2}_{i=l_2}a_i)=m$$

\bigoplus 表示异或,即:

  • 00=00\oplus0=0
  • 01=10\oplus1=1
  • 10=11\oplus0=1
  • 11=01\oplus1=0

输入格式

第一行两个整数 n,mn, m ,表示数组长度,异或和。

第二行 nn 个整数,表示数组 aa

输出格式

一行一个整数,表示答案。

保证答案不超过 long long 表示范围。

4 2
0 1 2 3
3
6 2
0 1 2 3 4 5
8
8 2
0 1 2 3 4 5 6 7
22

提示

【样例 1 解释】

  • 以下是 33 种方案
  • $A = \lbrace0\rbrace, B = \lbrace2\rbrace, 0\oplus2=2$
  • $A = \lbrace1\rbrace, B = \lbrace3\rbrace, 1\oplus3=2$
  • $A = \lbrace0, 1\rbrace, B = \lbrace3\rbrace, 0\oplus1\oplus3=2$

【数据范围】

  • 对于 100%100\% 的数据,$3 \leq n \leq 10^5, 0 \leq a_i \leq 1024, 0 \leq m \leq 1024$
测试点编号 特殊性质
121\sim2 保证 n20n \leq 20
343\sim4 保证 n50n \leq 50
565\sim6 保证 n200n \leq 200
787\sim8 保证 n5000n \leq 5000
9109\sim10
请思考后再点击查看提示

来源