2018省赛第九届蓝桥杯真题C语言B组第九题题解 全球变暖
2018第九届蓝桥杯C++省赛B组[最新题解汇总]
标题:全球变暖
你有一张某海域NxN像素的照片,"."表示海洋、"#"表示陆地,如下所示:
.......
.##....
.##....
....##.
..####.
...###.
.......
其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有2座岛屿。
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。
例如上图中的海域未来会变成如下样子:
.......
.......
.......
.......
....#..
.......
.......
请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。
【输入格式】
第一行包含一个整数N。 (1 <= N <= 1000)
以下N行N列代表一张海域照片。
照片保证第1行、第1列、第N行、第N列的像素都是海洋。
【输出格式】
一个整数表示答案。
【输入样例】
7
.......
.##....
.##....
....##.
..####.
...###.
.......
【输出样例】
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组第九题题解 全球变暖相关推荐
- 第九届蓝桥杯真题解析JavaC组
第九届蓝桥杯真题解析JavaC组 文章目录 ***第九届蓝桥杯真题解析JavaC组*** 前言 A.哪天回家 B.猴子分香蕉 C.字母阵列 D.第几个幸运数 E.书号验证 F.打印大X G.缩位求和 ...
- 2018省赛第九届蓝桥杯真题C语言B组第十题题解 乘积最大
2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:乘积最大 给定N个整数A1, A2, ... AN.请你从中选出K个数,使其乘积最大. 请你求出最大的乘积,由于乘积可能超出整型范围,你只 ...
- 2018省赛第九届蓝桥杯真题C语言B组第五题题解 快速排序
2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:快速排序. 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码, ...
- 2018省赛第九届蓝桥杯真题C语言B第四题题解 测试次数
2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:测试次数 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机 ...
- 2018省赛第九届蓝桥杯真题C语言B组第八题题解 日志统计
2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:日志统计 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有N行.其中每一行的格式是: ts id 表示在t ...
- 2018省赛第九届蓝桥杯真题C语言B组第六题题解 递增三元组
2018第九届蓝桥杯C++省赛B组[最新题解汇总] 标题:递增三元组 给定三个整数数组 A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C ...
- 2018年第九届蓝桥杯真题解析 | 日志统计【Python】
问题描述 小明维护着一个程序员论坛.现在他收集了一份"点赞"日志,日志共有 N 行.其中每一行的格式是: ts id 表示在 ts 时刻编号 id 的帖子收到一个"赞&q ...
- 2018年第九届蓝桥杯真题解析 | 星期一【Python】
问题描述 整个 2020 世纪(1901 年 1 月 1 日至 2000年 12 月 31 日之间),一共有多少个星期一? 个人思路 使用datetime模块 常见的datetime函数 1.S = ...
- 蓝桥杯第九届C语言C组第二题:猴子分香蕉
标题:猴子分香蕉 内容:5只猴子是好朋友,在海边的椰子树上睡着了.这期间,有商船把一大堆香蕉忘记在沙滩上离去. 第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份藏起来继续睡觉. 第2 ...
最新文章
- Linux: 使用bash命令ls按时间排序
- oracle中表空间的相关操作
- 设计模式——控制反转依赖注入
- python整数预测_时间序列预测全攻略(附带Python代码) | 36大数据
- 利用R和Octave求解线性方程组
- 负压电路_通风设备之负压风机的工作原理与安装方法是怎样的?
- 为什么先交钱后用电_车主快看,有上坡辅助,先抬离合后加油为什么不是熄火就是加空油...
- android统计流量,Android 获取手机整体流量使用情况以及某个应用的流量的统计
- 安装redis 5.0.5版本 真香警告
- MacBook 与 AirPods 连接不稳定处理方案
- git tracked branch
- Java的中文转换拼音、五笔简码
- 【matplotlib】画图怎样将中文为宋体-英文为新罗马字体
- “天使药丸”阿司匹林的前世今生
- Windows 10, version 21H2 (released Nov 2021) 简体中文版、英文版(企业版)下载
- Jupyter Notebook连接服务器失败
- jQuery学习基础理论(二)
- 【成为架构师课程系列】系统架构设计:非功能性目标的设计
- R语言获取丁香园疫情数据动态网站
- Soft-Clipping Mish激活函数