18清明校内测试T1

消失的数字(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);
}

作者:wlz

出处:http://www.cnblogs.com/bljfy/p/8734482.html

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/bljfy/p/8734482.html

时间: 2024-08-30 14:31:15

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

2019.6.28 校内测试 T1 Jelly的难题1

这题面有点难理解,建议直接跳到题意解释那一部分(虽然我觉得解释的不大对,但按照解释来做确实能AC): 按照“题意解释”的思路来思考这个题,那么就十分的简单了: 1.首先要读入这个字符矩阵,可以用cin(会不会TLE不知道),这里我用的是getchar读入: 2.从‘ * ’开始一遍广搜,记录一下每个‘ # ’被搜索到的时间,直到所有的点都被遍历过: 3.找出所有‘ # ’的位置时间最大的那个,就是第一问的答案,暂且记为much: 4.因为走过的格子每单位时间会增加1点高度,所以对于某一个格子 i

【学习笔记】2017年7月18日MySQL测试:模拟QQ数据库

模拟测试: QQ数据库管理 一.创建数据库并添加关系和测试数据 1 ##创建QQ数据库,完成简单的测试 2 3 #创建数据库 4 DROP DATABASE IF EXISTS MyQQ; 5 CREATE DATABASE MyQQ; 6 USE MyQQ; 7 8 #在数据库创建基本数据表 9 10 #创建User表 11 DROP TABLE IF EXISTS `User`; 12 CREATE TABLE `User`( 13 qqID INT(11) NOT NULL PRIMARY

Android学习第18天—— 面向对象测试, 对象输入流,输出流的使用

工作内容 面向对象测试 面向对象的自我梳理: 类 private(封装,能用的时候尽量用)[不可以用于修饰类] public protected (子类可用)[不能用于修饰类] 默认 成员变量,类变量(static) 成员方法,类方法(static)- static{ }最先执行,构造函数执行,static 返回类型 方法名(){ }需调用的时候才会执行 [类方法只能操作类变量] static修饰的属性和方法:属于类,最先拥有内存空间 构造方法:[修饰符] 类名 [同一个类中构造函数可以相互调用

2017-9-3 校内模拟T1卡片card

题意:有三种字母,可以用两个不同的换一个第三种字母,两个相同的换一个同种字母(即消去一个),问最后剩下的字母. 第一题显然是if题,总体来说只有三种情况: 1.有三种不同的>>输出"BGR" 2.有两种不同的:{ (1)两种都有超过一个>>情况1: (2)一种只有一个>>输出这种和未出现的字母 (3)两种都只有一个>>输出未出现的字母 }   3.只有一种字母>>输出这个字母 代码(极丑): 1 #include<ios

【8.15校内测试】【队列】【manacher】

dp??不能确定转移状态.考虑用优先队列储存最优决策点,可是发现当前选择最优不能保证最后最优,在后面可以将之前用过的替换过来. 比如数据: 3 5 4 6 只储存a[i]来决策不能延展到后面的状态,因此每次选择过后把b[i]加入队列,下次选择最优时如果选择到了b[i],则表示用之前选择过的来替换到当前状态. 这里我开了两个优先队列. 1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #define l

【8.16校内测试】【队列】【数学】【网络流/二分图最大匹配】

在一个队列中一次加入每一个字符,每次更新当前队列中的状态,当满足存在26个不同字符时,更新答案,删除队首. 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<queue> 5 #define RG register 6 using namespace std; 7 8 char s[2000005]; 9 int len, nex[2000005], flag[30]

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

Solution 几乎是秒想到的水题叻! 异或很容易想到每一位单独做贡献,所以我们需要统计的是区间内每一位上做的贡献,就是统计区间内每一位是1的数的数量. 所以就写数位dp辣!(昨天才做了数字统计不要太作弊啊!) Code #include<bits/stdc++.h> #define LL long long #define mod 1000000007 using namespace std; inline void read(LL &x) { x = 0; char ch = g

【11.2晚校内测试】【装桶模拟】【单调栈】

真的是fo了,晚上还来一次测试...... mister[问题描述] 不久前 Mister 从太空中探测到一个奇怪的信号,他开始研究这个信号. 经过一些变换后,这个信号变成了长度为 n 的排列或者它的循环移位.对于进一步的研究 Mister 需要一些数据分析,这就是为什么他决定选择这个排列的循环移位,它有最小的可 能偏差.我们把排列的偏差定义为 求一个可能偏差最小的排列 p 的循环移位. 让我们表示 k(0≤k < n)的循环移位排列 p 的变化需要达到这种转变,例如: k = 0: 变成 p1

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

Solution 数据范围疯狂暗示状压,可是一开始发现状态特别难受. 将每一层的奇偶性状压,预处理所有状态的奇偶性.每一层的输入代表的其实可以是下一层某个点可以被从这一层哪些点转移到. 所以枚举每个状态,再枚举下一层转移到哪个点,统计这个点被这个状态更新的话正边和反边分别的奇偶性,转移即可. 第二层和最后一层单独处理即可. Code #include<bits/stdc++.h> #define mod 998244353 using namespace std; int x, dp[2][(