allbymysel...:#include<iostream> #include<vector> using namespace std; //此题有一个要点,就是只要找到了某个区间xor为0,那么后面的数据就跟 //前面的没有关系了。因为区间不能重叠 int main() { int n; cin >> n; vector<int> input(n, 0); for (int i = 0; i < n; i++) cin >> input.at(i); //数据输入 int k = 0; vector<int> num; //用于记录当前所有的可能值 for (int i = 0; i < n; i++) { if (input.at(i) == 0) { k += 1; num.clear(); continue; // 跟样例一个道理,0 就直接是0。。。。 } if (input.at(i)>0) { int flag = 0; for (int j = 0; j < num.size(); j++) { num.at(j) = num.at(j) ^ input.at(i); if (num.at(j) == 0) { flag = 1; k += 1; num.clear(); } } //此处我举个例子,比如找第一个区间,现在循环到了第五位,有几种情况? // input.at(0) ^ input.at(1) ^ input.at(2) ^ input.at(3) ^ input.at(4) // input.at(1) ^ input.at(2) ^ input.at(3) ^ input.at(4) // input.at(2) ^ input.at(3) ^ input.at(4) // input.at(3) ^ input.at(4) // input.at(4) // 这样得到5个数字。来了第6个数,分别于他们xor,发现哪个结果是0,就找 // 到本个区间了,然后将记录清空,继续下一个 if (flag == 0) num.push_back(input.at(i)); } } cout << k << endl; return 0; }
0 点赞 评论 收藏
分享
创作者周榜
更多
关注他的用户也关注了: