Solution:
首先,一个区间的异或和可以由前缀异或和得到。即sum[l,r]=sum[r]^sum[l-1];
枚举左区间的右端点,再枚举左区间的左端点,开一个桶记录个数,再以该左区间右端点+1为右区间左端点,记录与左区间异或和相等的右区间个数,以此累加即为答案。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+5;
ll n,x,res,a[N],b[N];
int main()
{
  cin>>n;
  for(ll i=1;i<=n;i++)
  {
    cin>>x;
    a[i]=a[i-1]^x;
  }
  for(ll i=1;i<=n;i++)
  {
    for(ll j=0;j<i;j++)
      b[a[i]^a[j]]++;
    for(ll j=i+1;j<=n;j++)
      res+=b[a[i]^a[j]];
  }
  cout<<res<<'\n';
  return 0;
}