1

GESP认证C++编程真题解析 | B4360 [GESP202506 四级] 画布裁剪

欢迎大家订阅我的CSDN专栏算法题解:C++与Python实现
本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战!

专栏特色
1.经典算法练习:根据信息学竞赛大纲,精心挑选经典算法题目,提供清晰的代码实现与详细指导,帮助您夯实算法基础。
2.系统化学习路径:按照算法类别和难度分级,从基础到进阶,循序渐进,帮助您全面提升编程能力与算法思维。

适合人群:

  • 准备参加蓝桥杯、GESP、CSP-J、CSP-S等信息学竞赛的学生
  • 希望系统学习C++/Python编程的初学者
  • 想要提升算法与编程能力的编程爱好者

附上汇总帖:GESP认证C++编程真题解析 | 汇总


【题目来源】

洛谷:[B4360 GESP202506 四级] 画布裁剪 - 洛谷

【题目描述】

小 A 在高为 \(h\) 宽为 \(w\) 的矩形画布上绘制了一幅画。由于画布边缘留白太多,小 A 想适当地裁剪画布,只保留画的主体。具体来说,画布可以视为 \(h\)\(w\) 列的字符矩阵,其中的字符均为 ASCII 码位于 \(33∼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\) 的字符串,表示裁剪后的画布。

【输入样例】

3 5
2 2 2 4
.....
.>_<.
.....

【输出样例】

>_<

【算法标签】

《洛谷 B4360 画布剪裁》 #字符串(入门)# #GESP# #2025#

【代码详解】

#include <bits/stdc++.h>
using namespace std;

const int N = 105;  // 定义网格最大尺寸

int h, w;           // 网格的行数和列数
char a[N][N];       // 存储网格字符的二维数组
int x1, x2, y1, y2; // 定义要输出的子网格范围

int main()
{
    // 输入网格的行数和列数
    cin >> h >> w;
    
    // 输入要输出的子网格范围(左上角和右下角坐标)
    cin >> x1 >> x2 >> y1 >> y2;
    
    // 输入网格数据
    for (int i = 1; i <= h; i++)
        for (int j = 1; j <= w; j++)
            cin >> a[i][j];
    
    // 输出指定子网格范围内的内容
    for (int i = x1; i <= x2; i++)
    {
        for (int j = y1; j <= y2; j++)
            cout << a[i][j];  // 输出当前字符
        
        cout << endl;  // 每行结束后换行
    }
    
    return 0;
}

【运行结果】

3 5
2 2 2 4
.....
.>_<.
.....
> _ < 
posted @ 2026-01-16 15:05  热爱编程的通信人  阅读(0)  评论(0)    收藏  举报