2018第九届蓝桥杯C++省赛B组[最新题解汇总]

标题:全球变暖

你有一张某海域NxN像素的照片,"."表示海洋、"#"表示陆地,如下所示:

.......
.##....
.##....
....##.
..####.
...###.
.......

其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。

由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。

例如上图中的海域未来会变成如下样子:

.......
.......
.......
.......
....#..
.......
.......

请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。

【输入格式】
第一行包含一个整数N。  (1 <= N <= 1000)  
以下N行N列代表一张海域照片。

照片保证第1行、第1列、第N行、第N列的像素都是海洋。

【输出格式】
一个整数表示答案。

【输入样例】

.......
.##....
.##....
....##.
..####.
...###.
.......

【输出样例】
1

资源约定:
峰值内存消耗(含虚拟机) < 256M

CPU消耗  < 1000ms

思路:深搜岛屿然后处理淹没范围最后判断,有一点值得注意的是有可能海水侵蚀完后可能岛屿更多了,就是类似于这样的样例容易出错.

我是记录原岛屿由哪些点组成,侵蚀后看看这些点还有没有存活的.

代码:

#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define mod 1000000007
using namespace std;
typedef long long ll;
const int maxn = 1e6+5;
const double esp = 1e-7;
const int ff = 0x3f3f3f3f;
map<int,int>::iterator it;struct node
{int x,y;node(int x = 0,int y = 0):x(x),y(y){}
};int n;
int cnt;
char mp[1005][1005];
int vis[1005][1005];
vector<node> d[maxn];
int ne[4][2] = {1,0,-1,0,0,1,0,-1};void find(int x,int y)//寻找相连点
{d[cnt].push_back(node(x,y));vis[x][y] = 1;for(int i = 0;i< 4;i++){int tx = x+ne[i][0];int ty = y+ne[i][1];if(tx< 0||tx>= n||ty< 0||ty>= n||vis[tx][ty]||mp[tx][ty] == '.')continue;find(tx,ty);}return ;
}void Preprocess()//预处理岛屿
{for(int i = 0;i< n;i++)for(int j = 0;j< n;j++)if(mp[i][j] == '#'&&!vis[i][j]){cnt++;find(i,j);}return ;
}void dfs(int x,int y)//侵蚀
{vis[x][y] = 1;for(int i = 0;i< 4;i++){int tx = x+ne[i][0];int ty = y+ne[i][1];if(tx< 0||tx>= n||ty< 0||ty>= n||vis[tx][ty])continue;if(mp[tx][ty] == '#')vis[tx][ty] = 1;elsedfs(tx,ty);}return ;
}void solve()//开始侵蚀
{mem(vis,0);for(int i = 0;i< n;i++)for(int j = 0;j< n;j++)if(mp[i][j] == '.'&&!vis[i][j])dfs(i,j);return ;
}int main()
{cin>>n;for(int i = 0;i< n;i++)scanf(" %s",mp[i]);Preprocess();solve();int ans = 0;for(int i = 1;i<= cnt;i++)//判断组成岛屿的点还在不在{int j,k = d[i].size();for(j = 0;j< k;j++)if(vis[d[i][j].x][d[i][j].y] == 0)break;if(j == k)ans++;}cout<<ans<<endl;return 0;
}

2018省赛第九届蓝桥杯真题C语言B组第九题题解 全球变暖相关推荐

  1. 第九届蓝桥杯真题解析JavaC组

    第九届蓝桥杯真题解析JavaC组 文章目录 ***第九届蓝桥杯真题解析JavaC组*** 前言 A.哪天回家 B.猴子分香蕉 C.字母阵列 D.第几个幸运数 E.书号验证 F.打印大X G.缩位求和 ...

  2. 2018省赛第九届蓝桥杯真题C语言B组第十题题解 乘积最大

    2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:乘积最大 给定N个整数A1, A2, ... AN.请你从中选出K个数,使其乘积最大.   请你求出最大的乘积,由于乘积可能超出整型范围,你只 ...

  3. 2018省赛第九届蓝桥杯真题C语言B组第五题题解 快速排序

    2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:快速排序. 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码, ...

  4. 2018省赛第九届蓝桥杯真题C语言B第四题题解 测试次数

    2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:测试次数 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机 ...

  5. 2018省赛第九届蓝桥杯真题C语言B组第八题题解 日志统计

    2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在t ...

  6. 2018省赛第九届蓝桥杯真题C语言B组第六题题解 递增三元组

    2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:递增三元组 给定三个整数数组 A = [A1, A2, ... AN],  B = [B1, B2, ... BN],  C = [C1, C ...

  7. 2018年第九届蓝桥杯真题解析 | 日志统计【Python】

    问题描述 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有 N 行.其中每一行的格式是: ts id 表示在 ts 时刻编号 id 的帖子收到一个"赞&q ...

  8. 2018年第九届蓝桥杯真题解析 | 星期一【Python】

    问题描述 整个 2020 世纪(1901 年 1 月 1 日至 2000年 12 月 31 日之间),一共有多少个星期一? 个人思路 使用datetime模块 常见的datetime函数 1.S = ...

  9. 蓝桥杯第九届C语言C组第二题:猴子分香蕉

    标题:猴子分香蕉 内容:5只猴子是好朋友,在海边的椰子树上睡着了.这期间,有商船把一大堆香蕉忘记在沙滩上离去. 第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉. 第2 ...

最新文章

  1. Linux: 使用bash命令ls按时间排序
  2. oracle中表空间的相关操作
  3. 设计模式——控制反转依赖注入
  4. python整数预测_时间序列预测全攻略(附带Python代码) | 36大数据
  5. 利用R和Octave求解线性方程组
  6. 负压电路_通风设备之负压风机的工作原理与安装方法是怎样的?
  7. 为什么先交钱后用电_车主快看,有上坡辅助,先抬离合后加油为什么不是熄火就是加空油...
  8. android统计流量,Android 获取手机整体流量使用情况以及某个应用的流量的统计
  9. 安装redis 5.0.5版本 真香警告
  10. MacBook 与 AirPods 连接不稳定处理方案
  11. git tracked branch
  12. Java的中文转换拼音、五笔简码
  13. 【matplotlib】画图怎样将中文为宋体-英文为新罗马字体
  14. “天使药丸”阿司匹林的前世今生
  15. Windows 10, version 21H2 (released Nov 2021) 简体中文版、英文版(企业版)下载
  16. Jupyter Notebook连接服务器失败
  17. jQuery学习基础理论(二)
  18. 【成为架构师课程系列】系统架构设计:非功能性目标的设计
  19. R语言获取丁香园疫情数据动态网站
  20. Soft-Clipping Mish激活函数

热门文章

  1. [转] 晚上一般什么时候睡觉?
  2. 巴菲特指数表明美国股市被严重高估
  3. 微信开发者工具,出现“当前系统代理不是安全代理,是否信任?”
  4. Nacos服务端ip地址修改
  5. Linux云计算运维之Shell
  6. python导包和魔幻方法
  7. 微信小游戏 腾讯课堂《白鹭教育 - 成语大挑战小游戏开发》学习笔记
  8. 解决vps上的ssh掉线------tmux
  9. 计算机的创新知识,创新高中计算机知识学习的策略分析
  10. 一个生成Rockwell RSLogix5000 .csv 文件和.L5X文件的Excel插件