[C++] 找数

有两组数字,请找出第二组数中的哪些数在第一组中出现了,并从小到大输出。

I/O

输入

  • 第一行两个整数 n 和 m,分别代表 2 组数的数量。
  • 第二行 n 个正整数。
  • 第三行 m 个正整数。

样例

1
2
3
7 7
8 7 9 8 2 6 3
9 6 8 3 3 2 10

输出

按照要求输出满足条件的数,数与数之间用空格隔开。

样例

1
2 3 3 6 8 9

数据范围

对于 100% 的数据 1 ≤ n, m ≤ 100000,每个数  ≤ 2 × 109

答案

这题我们用 map 就能很简单的做出来,输入第一组数的时候在 map 中保存哪些数存在,再在输入第二组数的时候将 map 中标记为存在的数存进 vector,最后用 STL 函数 sort 排序,输出即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;

map<int, bool> f;
vector<int> b;
int n, m, t;

int main(){
cin >> n >> m;
while(n--){
cin >> t;
f[t] = true;
}
while(m--){
cin >> t;
if(f[t]) b.emplace_back(t);
}
sort(b.begin(), b.end());
for(auto& a : b) cout << a << " ";
return 0;
}