题意:求一个数组中的有多少组两个互不相交的区间异或和为零。
思路:直接暴力,从左到右枚举数组,将以当前元素的前一个元素为右端点,枚举该类区间的异或和,用一个数组仿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;
}