模拟T1数字number

那么第一题首先非常水的一道题……

看一下题

数字(number)

Time Limit:1000ms   Memory Limit:128MB

题目描述

LYK拥有n个数,这n个数分别是a1,a2,…,an。

有一天它做了一个梦,在梦里它的这n个数有部分被小偷偷走了,只剩下了m个数b1,b2,…,bm。它想知道有哪些数字被小偷偷走了!

LYK告诉你a和b的值,你需要从小到大的告诉LYK,哪些数字不见了!

输入格式(number.in)

    第一行一个数n,第二行n个数ai,表示一开始的数字。

    第三行一个数m,第四行m个数bi,表示剩下的数字。

输出格式(number.out)

    一行n-m个数,从小到大输出所有被偷走的数字。

Sample Input

5

1 3 3 7 8

3

3 7 8

Sample Output

1 3

数据范围

对于30%的数据n<=1000,ai与bi都是从小到大有序的。

对于60%的数据n<=100000,ai与bi都是从小到大有序的。

对于80%的数据n<=100000,ai,bi<=n。

对于100%的数据n<=100000,1<=ai,bi<=10^9。

由于上午讲了离散化,于是自然想到有离散化先处理一下,然后每次对照每个出现的数的出现个数就可以了.

这里就不附上代码了

金牌爷讲的时候却没有用离散化……

他用的只是普通的数组操作

那么一样的读入,然后快排,因为是100000的数量上限所以快排没有问题。

然后就开始逐位比对,两个数组是要分开操作的,并不难,下面附上这种方法的代码。

 1 #include<algorithm>
 2 #include<iostream>
 3 using namespace std;
 4 int a[100005],b[100005];
 5 int main() {
 6     int n,m;
 7     cin >> n;
 8     for(int i=1; i<=n; ++i)
 9         cin >> a[i];
10     cin >> m;
11     for(int i=1; i<=m; ++i)
12         cin >> b[i];
13     sort(a+1,a+n+1);
14     sort(b+1,b+m+1);    
15     int N=1;
16     for(int i=1; i<=n; ++i) {
17     
18         if(a[i]==b[N])
19             N++;
20         else
21             cout << a[i]<<' ';
22     }
23     return 0;
24 }

P.S祝贺詹宜瑞同学Rank1!!祝贺李博翱同学获得鼠标!!祝贺我自己Rank倒第一!!!

原文地址:https://www.cnblogs.com/DERZHAO/p/8424205.html