news 2026/4/23 13:57:17

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/4/22 22:01:21

好写作AI:让论文自己学会“起承转合”的魔法

你的论文是否曾因“语言干瘪、逻辑跳脱”被导师批注“建议多读文献”&#xff1f;别急&#xff0c;这很可能不是你的问题&#xff0c;而是工具没到位&#xff01;今天&#xff0c;就带你探秘「好写作AI」如何攻克中文写作的终极难题——让AI不仅连贯&#xff0c;更有“文气”与…

作者头像 李华
网站建设 2026/4/23 8:20:22

云手机性能提升难题,如何用Open-AutoGLM实现毫秒级响应?

第一章&#xff1a;云手机性能提升难题&#xff0c;如何用Open-AutoGLM实现毫秒级响应&#xff1f;在云手机系统中&#xff0c;用户对交互实时性的要求日益提高&#xff0c;传统自动化脚本常因环境识别延迟导致响应超过300毫秒&#xff0c;严重影响体验。为突破这一瓶颈&#x…

作者头像 李华
网站建设 2026/4/23 8:21:16

RunCat终极解决方案:快速修复任务栏小猫运行异常问题

RunCat是一款可爱的Windows任务栏小猫动画工具&#xff0c;通过猫咪奔跑速度直观显示CPU使用率&#xff0c;为枯燥的系统监控增添趣味性。然而不少用户在使用过程中遇到了小猫突然"停止工作"、动画卡顿或性能监控失灵等问题。本文将从用户实际痛点出发&#xff0c;提…

作者头像 李华
网站建设 2026/4/23 8:21:35

3步解锁TikTok流量分析:终极SSL验证绕过指南

3步解锁TikTok流量分析&#xff1a;终极SSL验证绕过指南 【免费下载链接】Tiktok-SSL-Pinning-Bypass Bypass Tiktok SSL pinning on Android devices. 项目地址: https://gitcode.com/gh_mirrors/ti/Tiktok-SSL-Pinning-Bypass TikTok SSL验证绕过项目为安全研究人员提…

作者头像 李华
网站建设 2026/4/23 8:21:42

Elsa 3.0工作流自动化:从零到精通的实战指南

Elsa 3.0工作流自动化&#xff1a;从零到精通的实战指南 【免费下载链接】elsa-core A .NET workflows library 项目地址: https://gitcode.com/gh_mirrors/el/elsa-core 你是否曾经为繁琐的重复性任务而烦恼&#xff1f;是否希望将复杂的业务流程转化为自动化的工作流&…

作者头像 李华
网站建设 2026/4/23 8:23:26

产品开发周期模型实战系列之瀑布模型:以线性流程标准化,保障需求明确型项目稳定交付

在敏捷开发席卷全球、DevOps追求分钟级部署的今天&#xff0c;谈论瀑布模型似乎显得有些“古典”甚至“过时”。然而&#xff0c;在无数关键的企业级软件、大型基础设施和军工航天系统中&#xff0c;这套诞生于上世纪70年代的线性流程模型&#xff0c;在需求确定性强的场景中&a…

作者头像 李华