week4-[二维数组]平面上的点

week4-[二维数组]平面上的点

题目描述

有 NNN 个二维平面上的点,每个点的坐标都是整数且坐标范围都在 0∼9990\sim 9990∼999 之间,求其中出现最频繁的点的出现次数及其坐标。

输入格式

第一行有一个整数 NNN,表示平面上点的个数。

接下来 NNN 行,每行有两个整数,表示一个平面上的点的 x,yx,yx,y 二维坐标。

输出格式

输出的第一行为一个整数,表示平面中的点出现的最多次数。

接下来输出每行两个整数,表示出现最频繁的点的二维坐标。

  • 如果有多个点均为最频繁出现的点,则输出包括多行。输出的顺序为:先按照 xxx 坐标从小到大输出,再按照 yyy 坐标从小到大输出。

样例 #1

样例输入 #1

复制代码
5
1 2
3 2
2 8
1 2
6 10

样例输出 #1

复制代码
2
1 2

样例 #2

样例输入 #2

复制代码
7
1 5
0 3
8 2
4 2
1 5
6 7
0 3

样例输出 #2

复制代码
2
0 3
1 5

样例 #3

样例输入 #3

复制代码
10
5 3
5 3
5 2
2 6
5 3
2 6
5 2
2 6
1 8
5 2

样例输出 #3

复制代码
3
2 6
5 2
5 3

提示

数据范围

对于所有数据,1≤n≤500001 \le n \le 500001≤n≤50000。

这题考察的是 二维点的统计与排序,重点在于:

  1. 统计每个点出现次数
  2. 找到最大出现次数
  3. 输出所有达到最大次数的点,按坐标排序

🔎 解题思路

  1. 存储与统计
    • 点的坐标范围在 [0,999],但 n 可达 50000,直接开 1000×1000 数组也行(内存约 1MB),也可以用 map<pair<int,int>, int> 来统计次数。
    • 推荐用 mapunordered_map,因为题目数据范围比较大,但点可能很稀疏。
  2. 寻找最大值
    • 遍历统计结果,找到出现次数的最大值 maxCnt
  3. 收集答案并排序
    • 遍历统计表,找出所有次数等于 maxCnt 的点,放到数组里。
    • 对结果按照 (x,y) 排序:先比 x,若相等再比 y

📝 C++ 实现

c++ 复制代码
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;
    map<pair<int,int>, int> freq;

    for (int i = 0; i < n; i++) {
        int x, y;
        cin >> x >> y;
        freq[{x, y}]++;
    }

    int maxCnt = 0;
    for (auto &p : freq) {
        if (p.second > maxCnt) maxCnt = p.second;
    }

    vector<pair<int,int>> ans;
    for (auto &p : freq) {
        if (p.second == maxCnt) ans.push_back(p.first);
    }

    sort(ans.begin(), ans.end()); // pair 默认先按 first 再按 second 排序

    cout << maxCnt << "\n";
    for (auto &pt : ans) {
        cout << pt.first << " " << pt.second << "\n";
    }

    return 0;
}
相关推荐
Bear on Toilet1 天前
继承类模板:函数未在模板定义上下文中声明,只能通过实例化上下文中参数相关的查找找到
开发语言·javascript·c++·算法·继承
金融小师妹1 天前
多因子AI回归揭示通胀-就业背离,黄金价格稳态区间的时序建模
大数据·人工智能·算法
程序员东岸1 天前
C语言入门指南:字符函数和字符串函数
c语言·笔记·学习·程序人生·算法
小猪咪piggy1 天前
【算法】day2 双指针+滑动窗口
数据结构·算法·leetcode
max5006001 天前
OpenSTL PredRNNv2 模型复现与自定义数据集训练
开发语言·人工智能·python·深度学习·算法
努力努力再努力wz1 天前
【c++进阶系列】:map和set的模拟实现(附模拟实现的源码)
java·linux·运维·开发语言·c++
budingxiaomoli1 天前
AVL树知识总结
数据结构·算法
jz-炸芯片的zero1 天前
【Zephyr电源与功耗专题】14_BMS电池管理算法(三重验证机制实现高精度电量估算)
单片机·物联网·算法·zephyr·bms电源管理算法
u0104058361 天前
京东返利app的分布式ID生成策略:雪花算法在订单系统中的实践
分布式·算法
lingran__1 天前
速通ACM省铜第三天 赋源码(Double Perspective和Trip Shopping和Hamiiid, Haaamid... Hamid?)
c++·算法