全部评论
#include <stdio.h>
送花
回复
分享
动态规划,和求最长递增子序列差不多
送花
回复
分享
滴滴
官网直投
没看懂题都是因为这个[0] xor = 0 其实即使一个数的时候,就是本身,因此只有0可以
送花
回复
分享
没有return 0;差评
送花
回复
分享
第一题,直接找一下数组中有多少个0元素,百分之20。。。
送花
回复
分享
#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; }
送花
回复
分享
10%
送花
回复
分享
第一题 看不懂。。。。
送花
回复
分享
没看懂题,xor
送花
回复
分享
60% 坐等学***神的思路~
送花
回复
分享
这道题真心bug,看了很久才理解到是只有一个元素的时候是跟0异或,上面的明明是说a[l] 到a[r],我以为两个端点一样就跟自己异或,那样有多少元素就有多少区间,啊,悲剧。。。。
送花
回复
分享
cout<<0<<endl;也是可以的,哈哈哈
送花
回复
分享
相关推荐
点赞 评论 收藏
转发