news 2026/6/21 9:55:36

GESP认证C++编程真题解析 | P10379 [GESP202403 七级] 俄罗斯方块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
GESP认证C++编程真题解析 | P10379 [GESP202403 七级] 俄罗斯方块

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

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

适合人群:

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

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


【题目来源】

洛谷:[P10379 GESP202403 七级] 俄罗斯方块 - 洛谷

【题目描述】

小杨同学用不同种类的俄罗斯方块填满了一个大小为n × m n \times mn×m的网格图。

网格图由n × m n \times mn×m个带颜色方块构成。小杨同学现在将这个网格图交给了你,请你计算出网格图中俄罗斯方块的种类数。
如果两个同色方块是四连通(即上下左右四个相邻的位置)的,则称两个同色方块直接连通;若两个同色方块同时与另一个同色方块直接或间接连通,则称两个同色方块间接连通。一个俄罗斯方块由一个方块和所有与其直接或间接连接的同色方块组成。定义两个俄罗斯方块的种类相同当且仅当通过平移其中一个俄罗斯方块可以和另一个俄罗斯方块重合;如果两个俄罗斯方块颜色不同,仍然视为同一种俄罗斯方块。

例如,在如下情况中,方块1 11和方块2 22是同一种俄罗斯方块,而方块1 11和方块3 33不是同一种俄罗斯方块。

【输入】

第一行包含两个正整数n nnm mm,表示网格图的大小。
对于之后的n nn行,第i ii行包含m mm个正整数a i 1 , a i 2 , … a i m a_{i1}, a_{i2}, \dots a_{im}ai1,ai2,aim,表示该行m mm个方块的颜色。

【输出】

输出一行一个整数表示答案。

【输入样例】

5 6 1 2 3 4 4 5 1 2 3 3 4 5 1 2 2 3 4 5 1 6 6 7 7 8 6 6 7 7 8 8

【输出样例】

7

【算法标签】

《洛谷 P10379 俄罗斯方块》 #模拟# #搜索# #GESP# #2024#

【代码详解】

#include<bits/stdc++.h>usingnamespacestd;constintN=505;intn,m,k,s,t,sx,sy;// n,m: 网格大小, sx,sy: 当前连通块的起始点inta[N][N];// 存储网格中的值intans;// 结果,不同形状的数量intvis[N][N];// 访问标记数组// 四个方向的偏移量:右、下、左、上intd[4][2]={{0,1},{1,0},{0,-1},{-1,0}};vector<pair<int,int>>e;// 存储当前连通块中所有点的相对坐标set<vector<pair<int,int>>>se;// 存储所有不同形状的连通块// 深度优先搜索,用于寻找连通块voiddfs(intx,inty){// 将当前点的相对坐标(相对于连通块起始点)存入向量ee.push_back({x-sx,y-sy});// 标记当前点已访问vis[x][y]=1;// 遍历四个方向for(inti=0;i<4;i++){intxx=x+d[i][0];// 新的x坐标intyy=y+d[i][1];// 新的y坐标// 检查新坐标是否有效if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&// 在网格范围内a[xx][yy]==a[x][y]&&// 值相同!vis[xx][yy])// 未访问过{dfs(xx,yy);// 继续深度优先搜索}}}intmain(){// 输入网格大小cin>>n>>m;// 输入网格数据for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){cin>>a[i][j];}}// 遍历整个网格for(inti=1;i<=n;i++){for(intj=1;j<=m;j++){// 如果当前点未访问过if(!vis[i][j]){// 记录连通块的起始点sx=i;sy=j;// 从当前点开始深度优先搜索,找到整个连通块dfs(i,j);// 将当前连通块的形状(相对坐标向量)插入集合// 集合会自动去重se.insert(e);// 清空向量,为下一个连通块做准备e.clear();}}}// 输出不同形状的数量cout<<se.size()<<endl;return0;}

【运行结果】

5 6 1 2 3 4 4 5 1 2 3 3 4 5 1 2 2 3 4 5 1 6 6 7 7 8 6 6 7 7 8 8 7
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 19:25:08

好写作AI:让Transformer帮你“肝”论文,导师看了都欣慰!

还在为论文的“引言难产&#xff0c;结论跑偏”而秃头吗&#xff1f;别慌&#xff0c;你的赛博写作助手已上线&#xff01;今天&#xff0c;深度揭秘「好写作AI」的核心黑科技——我们如何“调教”强大的Transformer模型&#xff0c;让它成为你论文路上的最强辅助。好写作AI官方…

作者头像 李华
网站建设 2026/6/10 14:59:26

好写作AI:会模仿你文风的AI,到底有多懂你?

写论文最痛苦的&#xff0c;是不是好不容易憋出内容&#xff0c;导师却说“这段不像你写的”&#xff1f;别慌&#xff01;「好写作AI」最新研发的个性化引擎&#xff0c;正在让AI从“通用写手”进化成“你的专属学术分身”——它不仅能写&#xff0c;还能学着用你的方式来写。…

作者头像 李华
网站建设 2026/6/6 1:33:55

好写作AI:实证研究表明,它如何成为你的“论文私教”?

你是否曾怀疑&#xff1a;AI写作工具真能提升我的写作水平&#xff0c;还是只会让我变懒&#xff1f;今天&#xff0c;我们用真实的研究数据说话&#xff01;一项针对高校学生的实证研究显示&#xff1a;「好写作AI」作为写作教学工具&#xff0c;正在颠覆传统论文辅导模式。好…

作者头像 李华
网站建设 2026/6/9 23:20:08

你真的会用Open-AutoGLM控制图形界面吗?3个被低估的核心能力曝光

第一章&#xff1a;Open-AutoGLM操控GUI的核心认知在构建与Open-AutoGLM交互的图形用户界面&#xff08;GUI&#xff09;时&#xff0c;核心在于理解其基于事件驱动的通信机制。GUI不仅是输入参数的容器&#xff0c;更是模型推理流程的可视化控制器。开发者需将自然语言指令解析…

作者头像 李华
网站建设 2026/6/20 14:08:29

HoRNDIS终极指南:解决Mac与Android USB网络共享的完整方案

HoRNDIS终极指南&#xff1a;解决Mac与Android USB网络共享的完整方案 【免费下载链接】HoRNDIS Android USB tethering driver for Mac OS X 项目地址: https://gitcode.com/gh_mirrors/ho/HoRNDIS 还在为Mac无法使用Android手机的USB网络共享而烦恼吗&#xff1f;你是…

作者头像 李华
网站建设 2026/6/13 14:38:36

Zotero Reading List:构建高效文献管理系统的完整解决方案

Zotero Reading List&#xff1a;构建高效文献管理系统的完整解决方案 【免费下载链接】zotero-reading-list Keep track of whether youve read items in Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-reading-list 面对日益增长的学术文献积累&#xf…

作者头像 李华