题意:求一个数组中的有多少组两个互不相交的区间异或和为零。
思路:直接暴力,从左到右枚举数组,将以当前元素的前一个元素为右端点,枚举该类区间的异或和,用一个数组仿map容器记录个数,再以当前元素左端点,枚举该类区间的异或和,将map容器中值相同的数的个数加起来就是结果了
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long #define inf 998244353 int a[1005], ma[500005]; int main() { int n; ll z=0; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } for(int i=1;i<n;i++) { int k=0; for(int j=i-1;j>=0;j--) { k=k^a[j]; ma[k]++; } k=0; for(int j=i;j<n;j++) { k=k^a[j]; z=z+ma[k]; } } printf("%lld\n",z); return 0; }