智障调了个二分,调了好久,发现不用分奇数偶数,最后还是被t了思路对了,处理的不对。
cnt[2][1<<20] 记录下对应奇偶对应值的个数
对于当前位置等于a,仅需找到之前奇偶性一致时有几个
#include<bits/stdc++.h>
using namespace std;
#define fst first
#define sec second
#define sci(num) scanf("%d",&num)
#define scl(num) scanf("%lld",&num)
#define mem(a,b) memset(a,b,sizeof a)
#define cpy(a,b) memcopy(a,b,sizeof b)
typedef long long LL;
typedef pair<int,int> P;
const int MAX_N = 3e5 + 100;
int N;
int cnt[2][1<<20];
int main() {
ios::sync_with_stdio(false); cin.tie(0);
cin >> N;
cnt[0][0] = 1;
int sum =0;
LL ans = 0;
for (int i = 1;i <= N;i++) {
int a;
cin >> a;
sum ^= a;
ans += cnt[i % 2][sum];
cnt[i %2][sum]++;
}
cout << ans << endl;
return 0;
}