思路:兩個連續區間的異或和爲0,看到區間嘛,就很容易想到前綴和處理,這個題目也差不多,前綴異或嘛,看着 n 爲 1000,就直接暴力找這兩個區間唄。
枚舉分割點,分割點之前的所有前綴異或和相同的都累加起來,然後枚舉分割點之後的疑惑和,如果有相等的(疑惑和爲0其實就是相等的意思吧)那麼就加上之前累加的值,這就湊成一對了,然後一直搞就出來答案了,ans記得開long long
#include <bits/stdc++.h>
using namespace std;
int pre[1005], n, x;
map <int, int> mp;
int main() {
scanf("%d", &n);
for(int i = 1;i <= n; i++) {
scanf("%d", &x);
pre[i] = pre[i-1]^x;
}
int ans = 0;
for(int i = 1;i <= n; i++) {
for(int j = 0;j < i; j++) {
mp[pre[i]^pre[j]]++;
}
for(int j = i+1;j <= n; j++) {
ans += mp[pre[j]^pre[i]];
}
}
printf("%lld\n", ans);
}