1. 程式人生 > >消失的數字(number)

消失的數字(number)

哪些 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)