18清明校内测试T1

it2022-05-09  56

消失的数字(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<=109


 

因为百分之百的数据ai,bi<=10,所以我们可以想到用C++的STL的容器可以过(数组肯定是不行的)。

当然可以用map也可以用set。不过今天只说map。

map的特性是满足一个映射的关系。

而10的9次方还在int范围内(2147483647),所以定义一个map<int, int>M;就够了。

第一个int是给s[i]开辟的,存的是输入的数,第二个int对应的是有几个这样的数,注意一定要用int形,因为有可能有一样的数字。

这样进行完操作后就可以按照降序输出了(桶排序有没有)。

双脚捧上我的AC代码

#include <iostream> #include <cstdio> #include <cstring> #include <map> using namespace std; int s[100005]; int n, m; map<int, int> M; int main() { freopen("number.in", "r", stdin); freopen("number.out", "w", stdout); scanf("%d", &n); for(int i=1; i<=n; i++) { scanf("%d", &s[i]); M[s[i]]++; } scanf("%d", &m); for(int i=1; i<=m; i++) { int a; scanf("%d", &a); M[a]--; } for(int i=1; i<=n; i++) { while(M[s[i]]) { printf("%d ", s[i]); M[s[i]]--; } } fclose(stdin); fclose(stdout); }
又从学那里得到了一种新的(强无敌的)做法。 我们先输入的数组用sort大法排好序以后就会保持单调递增。 后输入的被擦掉的数也存在一个数组内sort一遍,这样都就保持单调递增了。 那么下面就是最精彩的了让两个数组的下标同时前进(可能比较抽象,但是不要着急)。 为了方便理解直接手动模拟上面那组样例 第一组数排好序后是1 3 5 7 8 第二组是         3 5 8 从第一个开始1!=3,输出1,3 == 3,把第二个数组的下标前进一位(仔细想想正确性)。 5 == 5 第二组的下标再前进一位,7!=8输出7,8 == 8,结束。 怎么样是不是很强大。 代码如下 #include <iostream> #include <cstdio> #include <algorithm> using namespace std; int n, m; int a[100005], b[100005]; int main() { scanf("%d", &n); for(int i=1; i<=n; i++) { scanf("%d", &a[i]); } sort(a+1, a+1+n); scanf("%d", &m); for(int i=1; i<=m; i++) { scanf("%d", &b[i]); } sort(b+1, b+1+m); int x = 1; for(int i=1; i<=n; i++) { if(a[i] != b[x]) { printf("%d ", a[i]); } if(a[i] == b[x]) { x++; } } }     作者:wlz 出处:http://www.cnblogs.com/bljfy/p/8734482.html 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载于:https://www.cnblogs.com/bljfy/p/8734482.html

相关资源:清明上河图(flash版清明上河图)

最新回复(0)