消失的數字(number)
阿新 • • 發佈:2017-05-03
哪些 code b+ 描述 橡皮擦 什麽 正序 for 消失
消失的數字(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)