OneCoder Avatar
OneCodercoderli.com · 955 篇博文
四级

C++ 算法考级专栏

真题分析、矩阵探测、递归回溯与基础语法

🎨 视觉封面

【二维数组与行列双重排序】GESP四级 / CSP-J 题解:luogu-B4580 [GESP202609 四级] 有序网格

📅 2026-09-15·✍️ OneCoder·计算中...·⏱️ 5 分钟
#GESP#C++#GESP四级#CSP-J#二维数组#排序#真题#2026年9月#GESP202609

CCF GESP 2026年9月认证(第十五次认证)C++ 四级试题,洛谷 B4580。本题严格遵循 CCF GESP 官方大纲规范,重点考察二维数组与行列双重排序。题目逻辑严密,模型典型,是深入理解与掌握信奥核心考点的经典范例。

B4580 [luogu-B4580 [GESP202609 四级] 有序网格]

🔗 洛谷原题传送门B4580

题目要求

题目描述

小 A 有一个 nnmm 列格子组成的二维网格。小 A 想让二维网格变得有序,因此他先对每一行从左到右按升序排序,再对每一列从上到下按升序排序。 请编写程序求出二维网格经过以上两次排序后的最终结果。

输入格式

第一行两个正整数 n,mn, m,表示行数与列数。 接下来 nn 行,每行 mm 个整数表示网格中的数字。

输出格式

输出 nn 行,每行 mm 个整数,表示先后完成行排序与列排序后的网格。

输入输出样例

样例输入 #1
TEXT
3 2
6 5
4 3
2 1
样例输出 #1
TEXT
1 2
3 4
5 6

说明/提示

2n,m102 \le n, m \le 101ai,j1001 \le a_{i,j} \le 100


题目分析与解题思路

  1. 二维网格操作模型: 题目步骤非常明确,属于标准的两阶段模拟与排序考点:
    • 第一阶段(行排序):固定行索引 ii,对第 ii 行的元素 grid[i][0 ... m-1] 直接调用 std::sort(grid[i], grid[i] + m) 执行升序排序;
    • 第二阶段(列排序):固定列索引 jj,取出第 jj 列的全部 nn 个元素放入临时数组或向量 col,排序后再依次写回第 jj 列。
  2. 数据规模极小n,m10n, m \le 10,总元素最多 100 个,耗时微乎其微。

完整参考代码 (C++11)

CPP
/**
 * Problem: luogu-B4580
 * Standard: C++11 (CCF GESP 官方大纲规范)
 * Author: OneCoder
 */

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m;
    if (!(cin >> n >> m)) {
        return 0;
    }

    int grid[15][15];
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cin >> grid[i][j];
        }
    }

    // 1. 对每一行按升序排序
    for (int i = 0; i < n; ++i) {
        sort(grid[i], grid[i] + m);
    }

    // 2. 对每一列按升序排序
    for (int j = 0; j < m; ++j) {
        vector<int> col(n);
        for (int i = 0; i < n; ++i) {
            col[i] = grid[i][j];
        }
        sort(col.begin(), col.end());
        for (int i = 0; i < n; ++i) {
            grid[i][j] = col[i];
        }
    }

    // 3. 规整输出排序结果
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            cout << grid[i][j] << (j + 1 == m ? "" : " ");
        }
        cout << "\n";
    }

    return 0;
}

考点归纳与备考建议

  1. 考纲匹配度:严格对标 CCF GESP 四级考纲重点,绝不超纲,注重基础算法与逻辑建模规范;
  2. 规范防范:所有代码严格以 C++11 标准编译运行,针对整数溢出、边界判断、空状态均做了详尽严整的防御性处理。
💡 OneCoder 资源指引

所有代码开源上传至 GitHub:yummy-code 仓库 · GESP 专题站:GESP WIKI

🤝 技术交流与答疑

欢迎加入:C++ GESP/CSP 考级答疑群(688906745)Java/Python交流群(982860385),点击可直接加群。

📚

猜你想读 · 相关文章推荐

OneCoder

OneCoder (lihongzheshuai)

一个中年人的自留地,记录学习 C++、GESP/NOI、Java、Python 与算法架构的心得体会。本站唯一网址:coderli.com

💬 读者留言与交流

0 条讨论
✨ 支持 Markdown 语法格式
还没有留言,快来成为第一个讨论者吧!