文章

18

粉丝

183

获赞

57

访问

102.3k

头像
1909 乘法 map+反向迭代器(rbegan+rend)+stl find函数
推荐阅读
P1909 华东师范大学2022年机试
发布于2022年9月2日 10:55
阅读数 4.8k

思路很简单:先乘再排序就行了

注意点:在排序时,因为需要求出第k大的数,所以需要去重

两个去重方法

  • map自动去重
    • key和value都设置成number,map本身会自动按照key值排序,使用迭代器按顺序访问即可
  • vector手动去重
    • 对与已存在的number则不push,实现手动去重
      • find(v.began(),v.end(),num);在容器v中寻找num,若找到,返回其迭代器位置,找不到范围v.end()。该方法对于STL容器都适用

 

因为题目要求输出第k大的,相当于降序排序,但是sort默认升序排序,所以我使用反向迭代器,就不用去自定义cmp了

注意点

使用迭代器或反向迭代器时

尤其是反向迭代器,尽管看起来是从右到左遍历(即it--),但是运算符只重载了++,所以即使使用反向迭代器,也是用it++来达到一个“从右到左”的遍历效果


两种方法都使用了

代码如下

//1909 乘法 map+反向迭代器(rbegan+rend)+stl find函数
#include <bits/stdc++.h>

using namespace std;

int n, m, k;

int main()
{

    while (cin >> n >> m >> k)
    {
        int a[n];
        int b[m];
        map<int, int> c; //方法一用map

        vector<int> d; //方法二用vector

        for (int i = 0; i < n; i++)
        {
            cin >> a[i];
        }
        for (int j = 0; j < m; j++)
        {
            cin >> b[j];
    ...
登录查看完整内容


登录后发布评论

1 条评论
xddddddddddddd VIP
2024年9月22日 18:03

n * m 最大不是1e10吗,不会超时?数据弱了?

赞(1)