题目
https://codeforces.com/contest/1113/problem/C
题意
给你一个数列 求有多少区间满足
1 长度为偶数
2 前一半异或值等于后一半异或值
思路
前一半异或值等于后一半异或值 那么这个区间异或值为0 只需找前缀异或相等且长度为偶数即可 (即奇数位和奇数位)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int a[300005];
int sum[300005];
int num[(1<<20)+5][2];
int main()
{
int n;
scanf("%d", &n);
for(int i = 1;i <= n;i++)
{
scanf("%d", &a[i]);
sum[i] = sum[i-1]^a[i];
}
num[0][0]++;
ll ans = 0;
for(int i = 1;i <= n;i++)
{
ans += num[sum[i]][i&1];
num[sum[i]][i&1]++;
}
printf("%lld\n",ans);
return 0;
}