计数区间异或为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; }