全球变暖–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蓝桥杯省赛相关推荐

  1. 2018 蓝桥杯省赛 B 组模拟赛(一)--封印之门

    题目链接:https://nanti.jisuanke.com/t/A1594 蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以 ...

  2. 2018 蓝桥杯省赛 B 组模拟赛(一)-年龄

    今天蒜头君带着花椰妹和朋友们一起聚会,当朋友们问起年龄的时候,蒜头君打了一个哑谜(毕竟年龄是女孩子的隐私)说:"我的年龄是花椰妹年龄个位数和十位数之和的二倍". 花椰妹看大家一脸懵 ...

  3. 2018蓝桥杯省赛java_蓝桥杯2018年A组省赛

    1.分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似: 3/2 当然,这只是加了前2项而已.分 ...

  4. 2018 蓝桥杯省赛 B 组模拟赛(一) 封印之门+最短路径之Floyd

    题目: 蒜头君被暗黑军团包围在一座岛上,所有通往近卫军团的路都有暗黑军团把手.幸运的是,小岛上有一扇上古之神打造的封印之门,可以通往近卫军团,传闻至今没有人能解除封印. 封印之门上有一串文字,只包含小 ...

  5. 2018 蓝桥杯省赛 A 组模拟赛(一)数列求值+推导

    题目: 对于一个含有 n+2个元素的数列,A0.A1.--.An+1A_{0}.A_{1}.--.A_{n+1}A0​.A1​.--.An+1​ ,满足这样的递归公式 Ai=Ai−1+Ai+12−Ci ...

  6. 2018蓝桥杯省赛---java---C---9(小朋友崇拜圈)

    题目描述 思路分析 数组来储存小朋友们的崇拜对象,然后下标+1就是对应的小朋友座号,写一个方法找出每一个小朋友的崇拜圈大小,然后找出最大的崇拜圈即可 代码实现 package lanqiao;impo ...

  7. 2018蓝桥杯省赛---java---A---10(付账问题)

    题目描述 思路分析 用贪心算法,要使标准差最小,则需要将每个人需付的钱接近于平均值.如果有人的钱低于当前平均值a1,则需要将这人的钱全部支付,此人不够的钱需让其他人付,然后可以计算剩余人所需付钱的平均 ...

  8. 2018蓝桥杯省赛---java---A---9(倍数问题)

    题目描述 代码实现 package lanqiao;import java.util.ArrayList; import java.util.Collections; import java.util ...

  9. 2018蓝桥杯省赛---java---A---7(三体攻击)

    题目描述 题目:三体人将对地球发起攻击.为了抵御攻击,地球人派出了 A × B × C 艘战舰,在太空中排成一个 A 层 B 行 C 列的立方体.其中,第 i 层第 j 行第 k 列的战舰(记为战舰 ...

最新文章

  1. 如何从ATS获取客户端平均响应时间(单位,毫秒)?
  2. 深度学习环境配置指南:Pytorch、TensorFlow、Keras
  3. libevent-signal(2)
  4. Mac Vim 如何设置高亮
  5. 使用Ubuntu挂载NTFS格式分区
  6. linux安装jetty部署war包,jetty部署war包
  7. 关于STM32 SPI NSS的讨论
  8. 数据资产纳入国资保值增值考核
  9. ftp服务器多用文件夹权限,自己动手搭建隔离用户的FTP服务器之权限分配(二)...
  10. Silverlight+WCF 新手实例 象棋 棋子移动-规则补充(三十七)
  11. 分享80个贺卡图片PHP源码,总有一款适合你
  12. 【GlobalMapper精品教程】005:影像拼接与裁切(分幅)作业案例教程
  13. 教你怎么用三种办法找到发给你QQ的坦白说的那个人
  14. 【AI视野·今日CV 计算机视觉论文速览 第209期】Mon, 31 May 2021
  15. url 与 domain
  16. 因为计算机限制无法访问U盘,U盘拒绝访问怎么办解决教程
  17. imutils基础(7)使用 OpenCV 查找轮廓中的极值点
  18. Hadoop之MRjob入门
  19. 网站实现新浪微博登录
  20. protocol协议号协议说明

热门文章

  1. Mysql基础增删改查,主外键关联
  2. Python基础之列表
  3. 智能文本处理利器文心(ERNIE),助您高效定制NLP模型!
  4. 用C语言编程实现“判断某年某月有几天”
  5. 远程会议的正确打开方式
  6. 山东大学软件学院高级语言课程设计JAVA课程设计-学生在线考试系统平台
  7. 使用ZeroMemory、memset对结构体、数组的初始化
  8. Generic Webhook Trigger 远程触发
  9. 解压缩带有中文名文件的ZIP包
  10. 几分钟学会密码学(一)——维吉尼亚密码