滴滴xor真不会

难过,已经交卷了
上次内推两题都AC了,也不知道为什么被刷
这次只写出一题

#滴滴#
全部评论
图我收下了,谢谢楼主
点赞 回复 分享
发布于 2017-09-10 16:56
#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; }
点赞 回复 分享
发布于 2017-09-10 16:58
只过了30%
点赞 回复 分享
发布于 2017-09-10 17:01
还有其他楼里求答案的,真不知道什么心态。
点赞 回复 分享
发布于 2017-09-10 16:56
强行暴力,居然ac了,复杂度没啥限制
点赞 回复 分享
发布于 2017-09-10 16:58
看不懂题目 很伤
点赞 回复 分享
发布于 2017-09-10 16:58
import java.util.Map; import java.util.Scanner; import java.util.TreeMap; /** * @author Cherish * @version 1.0 * @date 2017/9/10 15:59 */ public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); if (n < 1) { return; } int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } TreeMap<Integer, Integer> treeMap = new TreeMap<>(); for (int i = 0; i < n; ) { int tmp = arr[i]; if (tmp == 0) {// 自成区间 treeMap.put(i, i); i++; continue; } i++; for (int j = i; j < n; j++) { tmp = tmp ^ arr[j]; if (tmp == 0) { treeMap.put(j, i);// i,j 成区间 做成 (j , i) 为了做活动选取 i = j + 1; break; } } } // 最多活动选取 int len = 0; int tmpJ = -1; for (Map.Entry<Integer, Integer> entry : treeMap.entrySet()) { Integer j = entry.getKey(); Integer i = entry.getValue(); if (i > tmpJ) { len++; tmpJ = j; } } System.out.println(len); } } 50%
点赞 回复 分享
发布于 2017-09-10 17:00
话说结果是以提交的最高正确程度为准还是以最后一次提交为准啊
点赞 回复 分享
发布于 2017-09-10 17:01
典型的动态规划,不过正确性待证明。
点赞 回复 分享
发布于 2017-09-10 17:03
int main() { int n; while(cin >> n) { vector<int> v; for(int i=0;i<n;i++) { int tmp; cin>>tmp; v.push_back(tmp); } int c=0; for(int i=0;i<n;i++) { if(v[i]==0) c++; if(i+1<n&&v[i]<=v[i+1]) { int tmp = v[i]^v[i+1]; //v[i]^v[i+1]; if(tmp==0) { c++; i++; } else { int k=i+1; while(k++) { if(k==n) break; if(v[k-1]<=v[k]) { tmp = tmp^v[k]; if(tmp==0) { c++; i=k; break; } } } } } } cout<<c<<endl; } return 0; } 30%  求指点哪错了
点赞 回复 分享
发布于 2017-09-10 17:05
怎么改只有百分之三十 心碎
点赞 回复 分享
发布于 2017-09-10 17:05
纯贪心,过40%
点赞 回复 分享
发布于 2017-09-10 17:05
package 滴滴; import java.util.Scanner; public class Demo1_非空区间 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr = new int[n]; for (int i = 0; i < arr.length; i++) { arr[i] = sc.nextInt(); } System.out.println(fun(arr)); } private static int fun(int[] arr) { int count = 0; int xor = 0; int pre = 0; for (int i = 0; i < arr.length; i++) { if(arr[i] == 0){ count++; xor = 0; pre = i; continue; }else{ xor = xor ^ arr[i]; if(xor == 0){ count++; pre = i; xor = 0; }else{//否则,从后往前求 异或 int newXor = 0; for (int j = i; j > pre; j--) { newXor = newXor^arr[j]; if(newXor == 0){ count++; pre = i; xor = 0; j = i+1; } } } } } return count; } }
点赞 回复 分享
发布于 2017-09-10 17:05
public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); long N=scanner.nextLong(); long num=0; long pre=-1; for(long i=0;i<N;i++){ long temp=scanner.nextLong(); if(temp==0){ num++; } else if(pre!=-1&&temp==pre){ num++; pre=-1; } else{ pre=temp; } } System.out.println(num); scanner.close(); } } 求指导一下
点赞 回复 分享
发布于 2017-09-10 17:05
过了70。。。
点赞 回复 分享
发布于 2017-09-10 17:11
🤣
点赞 回复 分享
发布于 2017-09-11 02:32

相关推荐

野猪不是猪🐗:把你的学校加黑,加粗,斜体,下划线,描边,内阴影,内发光,投影,外发光,再上渐变色,居中,放大到最大字号,再把简历里其它内容删了,就行了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务