[C++] 找数

18次阅读
没有评论

共计 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;
}
正文完
 0
元素
版权声明:本站原创文章,由 元素 于2024-10-22发表,共计625字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码