202506-画布裁剪(luogu-B4360)

202506-画布裁剪(luogu-B4360)

GESP C++四级2025年6月真题。本题主要考查二维数组的应用。属于四级题中的简单题。难度⭐⭐☆☆☆。本题在洛谷评定为入门

luogu-B4360 [GESP202506 四级] 画布裁剪

题目要求

题目描述

小 A 在高为 hh 宽为 ww 的矩形画布上绘制了一幅画。由于画布边缘留白太多,小 A 想适当地裁剪画布,只保留画的主体。具体来说,画布可以视为 hhww 列的字符矩阵,其中的字符均为 ASCII 码位于 3312633 \sim 126 之间的可见字符,小 A 只保留画布中由第 x1x_1 行到第 x2x_2 行、第 y1y_1 列到第 y2y_2 列构成的子矩阵。

小 A 将画布交给了你,你能帮他完成画布的裁剪吗?

输入格式

第一行,两个正整数 h,wh, w,分别表示画布的行数与列数。

第二行,四个正整数 x1,x2,y1,y2x_1, x_2, y_1, y_2,表示保留的行列边界。

接下来 hh 行,每行一个长度为 ww 的字符串,表示画布内容。

输出格式

输出共 x2x1+1x_2 - x_1 + 1 行,每行一个长度为 y2y1+1y_2 - y_1 + 1 的字符串,表示裁剪后的画布。

输入输出样例 #1

输入 #1
3 5
2 2 2 4
.....
.>_<.
.....
输出 #1
>_<

输入输出样例 #2

输入 #2
5 5
1 2 3 4
AbCdE
fGhIk
LmNoP
qRsTu
VwXyZ
输出 #2
Cd
hI

说明/提示

对于所有测试点,保证 1h,w1001 \leq h, w \leq 1001x1x2h1 \leq x_1 \leq x_2 \leq h1y1y2w1 \leq y_1 \leq y_2 \leq w


题目分析

本题是一道简单的二维数组操作题目。主要考察对字符矩阵的截取操作。

1. 数据结构设计

  • 使用字符串数组str_ary[105]存储输入的画布内容
  • 数组大小设置为105是为了满足题目要求的最大范围(h,w100h,w \leq 100),并留有余量

2. 核心算法思路

  • 首先读入画布的高度h和宽度w
  • 读入需要保留的区域范围:行(x1x_1x2x_2)和列(y1y_1y2y_2)
  • 读入整个画布内容,每行存储为一个字符串
  • 按照指定范围输出子矩阵:
    • 外层循环遍历行:从x1x_1x2x_2
    • 内层循环遍历列:从y1y_1y2y_2
    • 注意字符串下标从0开始,输出时需要将列坐标减1

3. 算法复杂度分析

  1. 时间复杂度

    • 读入画布内容:O(h×w)O(h \times w)
    • 输出裁剪区域:O((x2x1+1)×(y2y1+1))O((x_2-x_1+1) \times (y_2-y_1+1))
    • 总体时间复杂度:O(h×w)O(h \times w)
  2. 空间复杂度

    • 存储画布内容:O(h×w)O(h \times w)
    • 其他变量:O(1)O(1)
    • 总体空间复杂度:O(h×w)O(h \times w)

示例代码

#include <iostream>

// 定义字符串数组存储画布内容,最大支持105行
std::string str_ary[105];

int main() {
    // 声明画布的高度和宽度变量
    int h, w;
    std::cin >> h >> w;
    
    // 声明裁剪区域的行列范围变量
    int x1, x2, y1, y2;
    std::cin >> x1 >> x2 >> y1 >> y2;

    // 读入画布内容,每行一个字符串
    for (int i = 1; i <= h; i++) {
        std::cin >> str_ary[i];
    }

    // 输出裁剪后的画布内容
    // 外层循环遍历选定的行范围
    for (int i = x1; i <= x2; i++) {
        // 内层循环遍历选定的列范围
        for (int j = y1; j <= y2; j++) {
            // 注意:由于字符串下标从0开始,所以这里需要j-1
            std::cout << str_ary[i][j - 1];
        }
        // 每输出完一行后换行
        std::cout << "\n";
    }
    return 0;
}

本文由coderli.com原创,按照CC BY-NC-SA 4.0 进行授权

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
最后更新于