全球变暖--2018蓝桥杯省赛
全球变暖–2018蓝桥杯省赛
题目描述
你有一张某海域 NxN 像素的照片,".“表示海洋、”#"表示陆地,如下所示:
…
.##…
.##…
…##.
…####.
…###.
…
其中"上下左右"四个方向上连在一起的一片陆地组成一座岛屿。例如上图就有 2 座岛屿。
由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。具体来说如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没。
例如上图中的海域未来会变成如下样子:
…
…
…
…
…#…
…
…
请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。
输入描述
第一行包含一个整数 (1≤N≤1000)。
以下 N 行 N 列代表一张海域照片。
照片保证第 1 行、第 1 列、第 N 行、第 N 列的像素都是海洋。、
输出描述
输出一个整数表示答案。
输入输出样例
示例
输入
7
…
.##…
.##…
…##.
…####.
…###.
…
输出
1
运行限制
最大运行时间:1s
最大运行内存: 256M
分析
- 题目大意:
连通的#形成一个岛屿,靠 . 的 # 都将不再组成岛屿
求完全淹没的岛屿数量 - 思路:
假设所有岛屿都完全沉没,减去不沉的岛屿
遍历遇到#
沉默岛屿sum++
开始搜索整个岛屿标记搜索过的#为$,搜索过程中判断是否有不沉的,有不沉默的sum–
AC代码
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static char[][] land;public static int[][] pos = {{0, -1}, {0, 1},{-1, 0}, {1, 0}};public static int sink = 0;public static int sum = 0; //沉默岛屿数public static void main(String[] args) {Scanner sc = new Scanner(System.in);String s = sc.nextLine();int n = Integer.parseInt(s);land = new char[n][n + 1];for (int i = 0; i < n; i++) {land[i] = sc.nextLine().toCharArray();}for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {if(land[i][j] == '#'){sum += 1;sink = 0;search(i, j);sum -= sink;}}}System.out.println(sum);sc.close();}public static int isSink(int x, int y){for (int i = 0; i < 4; i++) {int xx = x + pos[i][0], yy = y + pos[i][1];if(xx < 0 || xx >= land.length || yy < 0 || yy >= land.length){continue;}if(land[xx][yy] == '.'){return 0;}}return 1;}public static void search(int x, int y){land[x][y] = '$';//标记if(sink == 0){sink = isSink(x, y); //判断}for (int i = 0; i < 4; i++) {int xx = x + pos[i][0], yy = y + pos[i][1];if(xx < 0 || xx >= land.length || yy < 0 || yy >= land.length){continue;}if(land[xx][yy] == '#'){search(xx, yy);}}}
}
补充
在java 的输入中要特别注意Scanner的使用,要理解其各个api的真确使用方法
比如这题之中的输入输出:
7
.......
.##....
.##....
....##.
..####.
...###.
.......
比如输入使用下面的代码(错误示范):
int n = sc.nextInt();
land = new char[n][n + 1];
for (int i = 0; i < n; i++) {land[i] = sc.nextLine().toCharArray();
}
打印land(或调试时)我们会发现land[0]为空串,真正的数据从land[1]开始且最后一行数据没有读入
原因就是当你使用sc.nextInt()时此api不会将换行符读入
而第一行为 7\n 7读完后此行还未读完
land[0] = sc.nextLine().toCharArray(); 执行时读入一个换行符所以为空
全球变暖--2018蓝桥杯省赛相关推荐
- 2018 蓝桥杯省赛 B 组模拟赛(一)--封印之门
题目链接:https://nanti.jisuanke.com/t/A1594 蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以 ...
- 2018 蓝桥杯省赛 B 组模拟赛(一)-年龄
今天蒜头君带着花椰妹和朋友们一起聚会,当朋友们问起年龄的时候,蒜头君打了一个哑谜(毕竟年龄是女孩子的隐私)说:"我的年龄是花椰妹年龄个位数和十位数之和的二倍". 花椰妹看大家一脸懵 ...
- 2018蓝桥杯省赛java_蓝桥杯2018年A组省赛
1.分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似: 3/2 当然,这只是加了前2项而已.分 ...
- 2018 蓝桥杯省赛 B 组模拟赛(一) 封印之门+最短路径之Floyd
题目: 蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印. 封印之门上有一串文字,只包含小 ...
- 2018 蓝桥杯省赛 A 组模拟赛(一)数列求值+推导
题目: 对于一个含有 n+2个元素的数列,A0.A1.--.An+1A_{0}.A_{1}.--.A_{n+1}A0.A1.--.An+1 ,满足这样的递归公式 Ai=Ai−1+Ai+12−Ci ...
- 2018蓝桥杯省赛---java---C---9(小朋友崇拜圈)
题目描述 思路分析 数组来储存小朋友们的崇拜对象,然后下标+1就是对应的小朋友座号,写一个方法找出每一个小朋友的崇拜圈大小,然后找出最大的崇拜圈即可 代码实现 package lanqiao;impo ...
- 2018蓝桥杯省赛---java---A---10(付账问题)
题目描述 思路分析 用贪心算法,要使标准差最小,则需要将每个人需付的钱接近于平均值.如果有人的钱低于当前平均值a1,则需要将这人的钱全部支付,此人不够的钱需让其他人付,然后可以计算剩余人所需付钱的平均 ...
- 2018蓝桥杯省赛---java---A---9(倍数问题)
题目描述 代码实现 package lanqiao;import java.util.ArrayList; import java.util.Collections; import java.util ...
- 2018蓝桥杯省赛---java---A---7(三体攻击)
题目描述 题目:三体人将对地球发起攻击.为了抵御攻击,地球人派出了 A × B × C 艘战舰,在太空中排成一个 A 层 B 行 C 列的立方体.其中,第 i 层第 j 行第 k 列的战舰(记为战舰 ...
最新文章
- 如何从ATS获取客户端平均响应时间(单位,毫秒)?
- 深度学习环境配置指南:Pytorch、TensorFlow、Keras
- libevent-signal(2)
- Mac Vim 如何设置高亮
- 使用Ubuntu挂载NTFS格式分区
- linux安装jetty部署war包,jetty部署war包
- 关于STM32 SPI NSS的讨论
- 数据资产纳入国资保值增值考核
- ftp服务器多用文件夹权限,自己动手搭建隔离用户的FTP服务器之权限分配(二)...
- Silverlight+WCF 新手实例 象棋 棋子移动-规则补充(三十七)
- 分享80个贺卡图片PHP源码,总有一款适合你
- 【GlobalMapper精品教程】005:影像拼接与裁切(分幅)作业案例教程
- 教你怎么用三种办法找到发给你QQ的坦白说的那个人
- 【AI视野·今日CV 计算机视觉论文速览 第209期】Mon, 31 May 2021
- url 与 domain
- 因为计算机限制无法访问U盘,U盘拒绝访问怎么办解决教程
- imutils基础(7)使用 OpenCV 查找轮廓中的极值点
- Hadoop之MRjob入门
- 网站实现新浪微博登录
- protocol协议号协议说明