链接:https://ac.nowcoder.com/acm/problem/14247
来源:牛客网

题目描述
给定一个长度为的整数数组,问有多少对互不重叠的非空区间,使得两个区间内的数的异或和为,


两个区间异或和为,则分别的异或和相等
为了避免重复,我们对于,查询构成的区间与前所有区间的方案数,并把组成的区间值添加到

```
#include <bits stdc++.h>
#define ri int
#define ll long long
using namespace std;
const int Maxn=1e3;
map<int,int>cnt;
int a[Maxn+5],n;
int main() {
scanf("%d",&n);
for(ri i=1;i<=n;i++)scanf("%d",&a[i]);
ll ans=0;
for(ri i=1;i<=n;i++) {
int sum=0;
for(ri j=i;j<=n;j++) {sum^=a[j];ans+=cnt[sum];}
sum=0;
for(ri j=i;j>=1;j--) {sum^=a[j];++cnt[sum];}
}
printf("%lld\n",ans);
return 0;
}

```</int,int>