当前位置: 首页 > news >正文

剪纸游戏【牛客tracker 每日一题】

剪纸游戏

时间限制:3秒 空间限制:256M

知识点:广度优先搜索(BFS)

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

小蓝拿着一张n × m n×mn×m的方格纸从中剪下若干不相连的图案;剪裁时只会沿着方格网线裁切,因此不会破坏任何一个完整的小方格。

小灰灰只拿到了剩余的残缺纸张。若用'.'表示被剪去的小方格,'*'表示仍保留的小方格,则他得到一张由'.''*'组成的矩阵。由于各个剪下的图案之间互不连通,小灰灰可以根据'.'的连通块反推出每一个被剪下来的图案。

现在小灰灰想知道:在所有被剪下来的图案中,有多少个是长方形(正方形视为特殊的长方形)。

输入描述:

第一行输入两个整数n , m ( 1 ≦ n , m ≦ 1000 ) n,m(1≦n,m≦1000)n,m(1n,m1000)——纸张的行数与列数。
接下来n nn行,每行输入一个长度为m mm的由'.''*'组成的字符串,描述残缺纸张的形状:

输出描述:

输出一个整数,表示被剪下来的图案中长方形的数量。

示例1

输入:

4 10 *.*.*...** ...***.*.. .**..*.*.. *..*****..

输出:

4

说明:

可以看出,图中恰有一个正方形,三个长方形,共计四个长方形。

解题思路

本题核心是BFS连通块遍历+外接矩形验证,高效统计符合要求的长方形图案数量。题目要求统计被剪去的'.'连通块中为标准长方形(含正方形)的数量,首先遍历整个网格,对未访问的'.'执行B F S BFSBFS,遍历过程中记录该连通块的最小/最大行、列坐标,确定其最小外接矩形。随后验证该外接矩形内的所有格子是否均为'.',若完全匹配则说明该连通块是长方形,计数加一;否则判定为非法。通过标记已访问的格子避免重复遍历,整体时间复杂度为O ( n m ) O(nm)O(nm),完美适配n , m ≤ 1000 n,m≤1000n,m1000的大数据规模。

总结

核心逻辑:用B F S BFSBFS找到所有'.'连通块,验证其外接矩形是否完全由自身填充,统计长方形数量。
关键操作:B F S BFSBFS遍历连通块、记录边界坐标、矩形全覆盖校验、访问标记去重。
效率保障:线性时间复杂度,无冗余计算,高效处理千万级网格数据。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;ll n,m;charmp[N][N];ll a[N][N];ll dir[][2]={{1,0},{-1,0},{0,-1},{0,1}};llbfs(ll x,ll y){queue<pll>q;q.push({x,y});ll x1=INT_MAX,x2=0,y1=INT_MAX,y2=0;x1=min(x1,x);x2=max(x2,x);y1=min(y1,y);y2=max(y2,y);while(!q.empty()){ll dx=q.front().first;ll dy=q.front().second;q.pop();for(ll i=0;i<4;i++){ll ex=dx+dir[i][0];ll ey=dy+dir[i][1];if(ex<1||ex>n||ey<1||ey>m||mp[ex][ey]=='*'||mp[ex][ey]=='-'){continue;}x1=min(x1,ex);x2=max(x2,ex);y1=min(y1,ey);y2=max(y2,ey);mp[ex][ey]='-';q.push({ex,ey});}}for(ll i=x1;i<=x2;i++){for(ll j=y1;j<=y2;j++){if(mp[i][j]=='*'){return0;}}}return1;}intmain(){cin>>n>>m;for(ll i=1;i<=n;i++){for(ll j=1;j<=m;j++){cin>>mp[i][j];}}ll sum=0;for(ll i=1;i<=n;i++){for(ll j=1;j<=m;j++){if(mp[i][j]=='.')sum+=bfs(i,j);}}cout<<sum<<endl;return0;}
http://www.jsqmd.com/news/742288/

相关文章:

  • 终极指南:SketchUp STL插件如何让你的3D设计轻松实现3D打印
  • 形式化验证不是玄学,C语言工具选型必须看这4个量化维度:SMT求解耗时、内存模型覆盖率、ANSI C89/99/11支持度、认证包完备性
  • AI系统提示词实战指南:从原理到应用,提升大模型协作效率
  • 企业内如何通过 Taotoken 实现 API Key 的统一管理与审计
  • 文本到视频生成中的提示优化技术RAPO++解析
  • 为什么N_m3u8DL-RE成为流媒体下载的终极解决方案
  • 基于Vicuna的中文对话模型部署与LoRA微调实战指南
  • DOM 加载函数
  • 2026Q2点阵二氧化碳激光治疗仪技术分享:妇科二氧化碳激光治疗机、超脉冲CO2激光治疗仪、超脉冲CO2激光治疗机选择指南 - 优质品牌商家
  • Cursor AI编程提效:开源指令集实战与定制指南
  • 嵌入式Web服务技术:SOAP与WSDL在物联网中的实践
  • 生成式AI与OpenUSD在品牌营销视觉中的应用
  • 3分钟掌握微博PDF备份:Speechless Chrome扩展终极指南
  • 5倍提速技巧:百度网盘解析工具高效下载指南
  • JTok-M技术解析:MoE模型扩展与计算优化
  • 构建AI记忆体技能框架:从向量检索到智能体上下文感知
  • LLM代码仓库助手:用大语言模型自动化项目分析与维护
  • 高斯模型在多选题数据分析中的应用与实践
  • 2026年4月有名的刀边腹板企业推荐分析,焦炉横拉条/破碎机锤头/焦炉设备/炉门炉框保护板,刀边腹板直销厂家怎么选择 - 品牌推荐师
  • Micro1 超详细深度解析:架构原理、部署实战、性能评测与落地应用全指南
  • 基于FPGA的双模式多运动目标检测设计帧间差分法【附代码】
  • 智能家居基础模型DomusFM:Transformer架构与传感器数据分析
  • 别再硬调参数了!Halcon OCR自定义训练中的图像预处理黄金法则与避坑指南
  • C#性能优化完全指南 - 从原理到实践
  • 工业HMI终端ED-HMI3020:树莓派5驱动的工业级解决方案
  • 3步搞定LaTeX公式转换:你的学术写作效率提升方案
  • 越野自动驾驶的‘眼睛’如何炼成?深度解读ORFD数据集的设计哲学与标注策略
  • 抖音下载器:三步掌握无水印内容保存技巧
  • GRUB启动ISO文件指南
  • 大二学生实战:手把手教你用IDEA+PHPStudy在Windows上部署Litemall商城(附数据库配置避坑)