消失的数字(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个数,从小到大输出所有被擦去的数字。

输入样例


输出样例

 

数据范围

对于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[];
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=; i<=n; i++) {
scanf("%d", &s[i]);
M[s[i]]++;
}
scanf("%d", &m);
for(int i=; i<=m; i++) {
int a;
scanf("%d", &a);
M[a]--;
}
for(int i=; 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[], b[]; int main() {
scanf("%d", &n);
for(int i=; i<=n; i++) {
scanf("%d", &a[i]);
}
sort(a+, a++n);
scanf("%d", &m);
for(int i=; i<=m; i++) {
scanf("%d", &b[i]);
}
sort(b+, b++m);
int x = ;
for(int i=; i<=n; i++) {
if(a[i] != b[x]) {
printf("%d ", a[i]);
}
if(a[i] == b[x]) {
x++;
}
}
}
 
 
作者:wlz
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

18清明校内测试T1的更多相关文章

  1. 18清明校内测试T3

    扫雷(mine) Time Limit:1000ms   Memory Limit:128MB 题目描述 rsy最近沉迷于一款叫扫雷的游戏. 这个游戏是这样的.一开始网格上有n*m个位置,其中有一些位 ...

  2. 18清明校内测试T2

    一道数论好题(math) Time Limit:1000ms   Memory Limit:128MB 题目描述 rsy最近在研究欧几里得算法,不会的同学可以去看下课件以及代码…… 现在她想到了一个新 ...

  3. 2019.7.9 校内测试 T1挖地雷

    这一次是交流测试?边交流边测试(滑稽 挖地雷 这个题是一个递推问题. 首先我们看第一个格子,因为它只影响了它的上面和右上面这两个地方是否有雷. 我们可以分3种情况讨论: 1. 第一个格子的数字是2: ...

  4. 2019.6.28 校内测试 T1 Jelly的难题1

    这题面有点难理解,建议直接跳到题意解释那一部分(虽然我觉得解释的不大对,但按照解释来做确实能AC): 按照“题意解释”的思路来思考这个题,那么就十分的简单了: 1.首先要读入这个字符矩阵,可以用cin ...

  5. 【8.30校内测试】【找规律模拟】【DP】【二分+贪心】

    对于和规律或者数学有关的题真的束手无策啊QAQ 首先发现两个性质: 1.不管中间怎么碰撞,所有蚂蚁的相对位置不会改变,即后面的蚂蚁不会超过前面的蚂蚁或者落后更后面的蚂蚁. 2.因为所有蚂蚁速度一样,不 ...

  6. 校内测试:T1秋末的落叶(命题人gxl)官方题解

    秋末的落叶 题解 传送门:https://www.luogu.com.cn/problem/U121886 Part 1:疏通题意 首先,我们从题意和样例解释中很容易提取到以下信息: \(1.\)本题 ...

  7. AMQ学习笔记 - 18. 持久化的测试

    概述 对持久化的有效性进行测试. 测试实例 测试实例 结果预测 持久化递送 重启ActiveMQ后,消息还在队列中 非持久化递送 重启ActiveMQ后,消息不在队列中 demo设计 jms-prod ...

  8. 【11.8校内测试】【倒计时2天】【状压DP】【随机化?/暴力小模拟】

    Solution 数据范围疯狂暗示状压,可是一开始发现状态特别难受. 将每一层的奇偶性状压,预处理所有状态的奇偶性.每一层的输入代表的其实可以是下一层某个点可以被从这一层哪些点转移到. 所以枚举每个状 ...

  9. 【10.17校内测试】【二进制数位DP】【博弈论/预处理】【玄学(?)DP】

    Solution 几乎是秒想到的水题叻! 异或很容易想到每一位单独做贡献,所以我们需要统计的是区间内每一位上做的贡献,就是统计区间内每一位是1的数的数量. 所以就写数位dp辣!(昨天才做了数字统计不要 ...

随机推荐

  1. 全然卸载oracle11g步骤

    iLife's 博客http://blog.csdn.net/fei1502816 全然卸载oracle11g步骤: 1. 開始->设置->控制面板->管理工具->服务 停止全 ...

  2. LeetCode总结--二分查找篇

    二分查找算法尽管简单,但面试中也比較常见.经经常使用来在有序的数列查找某个特定的位置.在LeetCode用到此算法的主要题目有: Search Insert Position Search for a ...

  3. 命令行下mysql的部分操作

    远程链接数据库: mysql –u用户名 [–h主机名或者IP地址] –p密码 (用户名是登录的用 户,主机名或者IP地址为可选项,如果是本地连接则不需要,远程连接需要填写,密码是对应用户的密码.) ...

  4. css list menu

    选择让page和folder都显示出来

  5. JavaScript Patterns 2.2 Minimizing Globals

    Access a global variable in a browser environment: myglobal = "hello"; // antipattern cons ...

  6. 硬盘-RAID 5组建

    没发正文之前本人先声明一下----本文是转载 这篇文章简直是太精彩了,呵呵 ,实在是忍不住了,一定要贴出来,让大家分享! 原作者:唐华 责任编辑:xiexiaojin 我们生活在一个历史记录在硬盘上的 ...

  7. XAML实例教程系列 - 对象和属性(二)

    XAML实例教程系列 - 对象和属性 2012-05-22 14:18 by jv9, 1778 阅读, 6 评论, 收藏, 编辑 在前一篇已经介绍XAML概念:“XAML语言是Extensible ...

  8. luoguP2939 [USACO09FEB]改造路Revamping Trails

    约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 速公路. ...

  9. Java Swing Action 动作

    Swing包提供了一种非常实用的机制来封装命令,并将它们连接到多个事件源,这就是Action接口.一个动作是一个封装下列内容的对象: × 命令的说明(一个文本字符串和一个可选图标): × 执行命令所需 ...

  10. PCB genesis大孔加小孔(即卸力孔)实现方法

    一.为什么 大孔中要加小孔(即卸力孔) 这其实跟钻刀的排屑有关了,当钻刀越大孔,排屑量也越大(当然这也得跟转速,下刀速的参数有关系),通常当钻刀越大,转速越慢,下刀速也越慢(因为要保证它的排屑通畅). ...