共计 625 个字符,预计需要花费 2 分钟才能阅读完成。
题面
有两组数字,请找出第二组数中的哪些数在第一组中出现了,并从小到大输出。
输入描述
第一行两个整数 n 和 m,分别代表 2 组数的数量。
第二行 n 个正整数。
第三行 m 个正整数。
输出描述
按照要求输出满足条件的数,数与数之间用空格隔开。
样例
输入
7 7
8 7 9 8 2 6 3
9 6 8 3 3 2 10
输出
2 3 3 6 8 9
数据范围
对于 100% 的数据 1≤n,m≤100000,每个数 ≤2×109
答案
这题我们用 map 就能很简单的做出来,输入第一组数的时候在 map 中保存哪些数存在,再在输入第二组数的时候将 map 中标记为存在的数存进 vector,最后用 STL 函数 sort 排序,输出即可。
代码如下:
#pragma GCC optimize(3, "Ofast", "inline")
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
int main(){ios::sync_with_stdio(false);
cin.tie(0);
map<int,bool> a;
int n, m;
cin >> n >> m;
vector<int> b;
while(n--){
int t;
cin >> t;
a[t] = true;
}
while(m--){
int t;
cin >> t;
if(a[t]) b.push_back(t);
}
sort(b.begin(), b.end());
for(int i : b) cout << i << " ";
return 0;
}
正文完