计数区间异或为0(不可交)
https://www.cnblogs.com/Harley-Quinn/p/7513052.html
题意:给一组数n,求区间异或和为0且任意区间不交的数量
解法:贪心两区间都为0选右边界小的区间,会使得答案更优
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int a[100009];
int cnt = 0 ;
void work(int a[] , int n){
vector<int>v;
v.reserve(n);
int low = 0 ;//左边界
for(int i = 0 ; i < n ; i++)//右边界
{
v.clear();
v.push_back(a[i]);
for(int j = i-1 ; j >= low ; j--)
{
v.push_back(v.back()^a[j]);//以i为右边界low为左边的所有区间异或和存入数组v
}
if(find(v.begin() , v.end() , 0) != v.end())//查找区间异或为0
{
low = i+1 ;//更新左边界。
cnt++;
}
}
}
int main()
{
int n;
scanf("%d" , &n);
for(int i = 0 ; i < n ; i++)
{
scanf("%d" , &a[i]);
}
work(a , n);
cout << cnt << endl;
return 0;
}

浙公网安备 33010602011771号