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;
}
相关推荐
GetcharZp10 小时前
拒绝硬编码!C++ 配置文件管理神器 yaml-cpp 实战指南
c++
ullio10 小时前
div1+2. 2178F - Conquer or of Forest
算法
墨有66610 小时前
C++ string 部分功能详解:迭代器、初始化与常用函数
开发语言·c++
Leweslyh10 小时前
制导算法开发实践指南:从入门到精通
算法·开发·武器·制导律设计
chushiyunen10 小时前
快慢双指针算法笔记
数据结构·笔记·算法
枫叶丹410 小时前
【Qt开发】Qt系统(二)-> 事件分发器
c语言·开发语言·数据库·c++·qt·系统架构
烟锁池塘柳011 小时前
一文总结模型压缩技术:剪枝、量化与蒸馏的原理、实践与工程思考
算法·机器学习·剪枝
独自破碎E11 小时前
Leetcode1438绝对值不超过限制的最长连续子数组
java·开发语言·算法
東雪木11 小时前
编程算法学习——数组与排序算法
学习·算法
你撅嘴真丑11 小时前
方格取数 矩阵取数游戏 -动态规划
算法·动态规划