【GESP】C++四级真题 luogu-B4360 [GESP202506 四级] 画布裁剪
GESP C++四级2025年6月真题。本题主要考查二维数组的应用。属于四级题中的简单题。难度⭐⭐☆☆☆。本题在洛谷评定为入门
。
luogu-B4360 [GESP202506 四级] 画布裁剪
题目要求
题目描述
小 A 在高为 $h$ 宽为 $w$ 的矩形画布上绘制了一幅画。由于画布边缘留白太多,小 A 想适当地裁剪画布,只保留画的主体。具体来说,画布可以视为 $h$ 行 $w$ 列的字符矩阵,其中的字符均为 ASCII 码位于 $33 \sim 126$ 之间的可见字符,小 A 只保留画布中由第 $x_1$ 行到第 $x_2$ 行、第 $y_1$ 列到第 $y_2$ 列构成的子矩阵。
小 A 将画布交给了你,你能帮他完成画布的裁剪吗?
输入格式
第一行,两个正整数 $h, w$,分别表示画布的行数与列数。
第二行,四个正整数 $x_1, x_2, y_1, y_2$,表示保留的行列边界。
接下来 $h$ 行,每行一个长度为 $w$ 的字符串,表示画布内容。
输出格式
输出共 $x_2 - x_1 + 1$ 行,每行一个长度为 $y_2 - y_1 + 1$ 的字符串,表示裁剪后的画布。
输入输出样例 #1
输入 #1
1
2
3
4
5
3 5
2 2 2 4
.....
.>_<.
.....
输出 #1
1
>_<
输入输出样例 #2
输入 #2
1
2
3
4
5
6
7
5 5
1 2 3 4
AbCdE
fGhIk
LmNoP
qRsTu
VwXyZ
输出 #2
1
2
Cd
hI
说明/提示
对于所有测试点,保证 $1 \leq h, w \leq 100$,$1 \leq x_1 \leq x_2 \leq h$,$1 \leq y_1 \leq y_2 \leq w$。
题目分析
本题是一道简单的二维数组操作题目。主要考察对字符矩阵的截取操作。
1. 数据结构设计
- 使用字符串数组
str_ary[105]
存储输入的画布内容 - 数组大小设置为105是为了满足题目要求的最大范围($h,w \leq 100$),并留有余量
2. 核心算法思路
- 首先读入画布的高度h和宽度w
- 读入需要保留的区域范围:行($x_1$ 到 $x_2$)和列($y_1$ 到 $y_2$)
- 读入整个画布内容,每行存储为一个字符串
- 按照指定范围输出子矩阵:
- 外层循环遍历行:从$x_1$到$x_2$
- 内层循环遍历列:从$y_1$到$y_2$
- 注意字符串下标从0开始,输出时需要将列坐标减1
3. 算法复杂度分析
- 时间复杂度
- 读入画布内容:$O(h \times w)$
- 输出裁剪区域:$O((x_2-x_1+1) \times (y_2-y_1+1))$
- 总体时间复杂度:$O(h \times w)$
- 空间复杂度
- 存储画布内容:$O(h \times w)$
- 其他变量:$O(1)$
- 总体空间复杂度:$O(h \times w)$
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#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;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP 学习专题站:GESP WIKI
“luogu-”系列题目可在洛谷题库进行在线评测。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
欢迎加入:Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答
欢迎加入:C++ GESP/CSP认证学习QQ频道,考试资源总结汇总
欢迎加入:C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助