首页 > 代码库 > 消失的数字(number)
消失的数字(number)
消失的数字(number)
Time Limit:1000ms Memory Limit:128MB
题目描述
rsy拥有n个数,这n个数分别是a1,a2,…,an。
后来出现了一个熊孩子zhw,用橡皮擦去了其中若干个数字,并且打乱了剩下的数字。rsy赶到现场后只剩下了m个数字b1,b2,…,bm,她想知道哪些数字被擦去了。
现在你需要告诉rsy被擦去的n-m个数是什么。
输入格式(number.in)
第一行一个数n,第二行n个数ai,表示一开始的数字。
第三行一个数m,第四行m个数bi,表示被擦去后的数字。
输出格式(number.out)
一行n-m个数,从小到大输出所有被擦去的数字。
输入样例
5
1 3 5 7 8
3
3 5 8
输出样例
1 7
数据范围
对于30%的数据n<=1000,ai与bi都是有序的。
对于60%的数据n<=100000,ai与bi都是有序的。
对于80%的数据n<=100000,ai,bi<=n。
对于100%的数据n<=100000,1<=ai,bi<=10^9。
60分代码
对于这个题,我刚拿到时,一看到数据范围就开始想什么奇怪的算法,因为我认为普通算法会超时,(可是当拿到std时我蒙了,竟然就是那样;)
所以当时就直接奔60分去了;由于不充分理解题意,写了个很2的代码
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 #include<string> 7 8 using namespace std; 9 10 const int N=100001; 11 12 int a[N]; 13 int b[N]; 14 int fa=0; 15 int fb=0;//是正序 --从小到大 16 17 int main() 18 { 19 freopen("number.in","r",stdin); 20 freopen("number.out","w",stdout); 21 int n; 22 int sh; 23 scanf("%d",&n); 24 for(int i=1;i<=n;i++) 25 { 26 scanf("%d",&a[i]); 27 } 28 scanf("%d",&sh); 29 for(int i=1;i<=sh;i++) 30 { 31 scanf("%d",&b[i]); 32 } 33 34 if(a[1]>a[2]) 35 { 36 fa=1;//前面的大 37 } 38 if(b[1]>b[2]) 39 { 40 fb=1; 41 } 42 if(fa==fb&&fa==0) 43 { 44 int js=1; 45 for(int i=1;i<=n;i++) 46 { 47 if(a[i]!=b[js]) 48 { 49 printf("%d ",a[i]); 50 } 51 else 52 { 53 js++; 54 } 55 } 56 return 0; 57 } 58 if(fa==fb&&fa==1) 59 { 60 int js=sh; 61 for(int i=n;i>=1;i--) 62 { 63 if(a[i]!=b[js]) 64 { 65 printf("%d ",a[i]); 66 } 67 else 68 { 69 js--; 70 } 71 } 72 return 0; 73 } 74 if(fa==0&&fb==1) 75 { 76 int js=sh; 77 for(int i=1;i<=n;i++) 78 { 79 if(a[i]!=b[js]) 80 { 81 printf("%d ",a[i]); 82 } 83 else 84 { 85 js--; 86 } 87 } 88 return 0; 89 } 90 if(fa==1&&fb==0) 91 { 92 int js=1; 93 for(int i=n;i>=1;i--) 94 { 95 if(a[i]!=b[js]) 96 { 97 printf("%d ",a[i]); 98 } 99 else 100 { 101 js++; 102 } 103 } 104 return 0; 105 } 106 }
ac代码
#include <cmath> #include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm> using namespace std; int n,m,i,X,a[100005],b[100005]; int cmp(int i,int j) {return i<j;} int main() { freopen("number.in","r",stdin); freopen("number.out","w",stdout); scanf("%d",&n); for (i=1; i<=n; i++) scanf("%d",&a[i]); scanf("%d",&m); for (i=1; i<=m; i++) scanf("%d",&b[i]); sort(a+1,a+n+1,cmp); sort(b+1,b+m+1,cmp); X=1; for (i=1; i<=n; i++) { if (a[i]==b[X]) X++; else printf("%d ",a[i]); } return 0; }
很好理解,就不打注释了
可以说水题一道
消失的数字(number)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。