JZOJ 3.10 1540——岛屿

2024-01-30 11:48
文章标签 jzoj 岛屿 3.10 1540

本文主要是介绍JZOJ 3.10 1540——岛屿,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

每当下雨时,FJ的牧场都会进水。由于牧场地面高低不平,被水淹没的地方不是很统一,形成一些岛屿。

FJ的牧场可描述成一个一维的地形图,由N(1 <= N <= 100,000)个彼此相连的柱状的高度值组成。高度值为H(1)…H(n)。假定这个地形图的两端有两条无限高的墙围着。

这里写图片描述
当雨一直下时,地形图上最低的区域先被水淹没,形成一些不相邻的岛屿。一旦水面高度到达一个区域的高度,则认为这个区域被淹没。

左图,在当前水面时,有4个岛屿。右图,在水面升高后,剩下2个岛屿。显然,最终所有的区域都会沉入水面。

算出当雨从开始下到最后所有岛屿沉入水中,最多时可形成多少个岛屿。

输入

第1行:1个整数N

第2..N+1行:每行一个整数,表示一个区域的高度H(i). (1 <= H(i) <= 1,000,000,000)

输出

第1行: 1个整数,表示最多时能看到的岛屿数

样例输入

8

3

5

2

3

1

4

2

3

样例输出

4


感谢上天,终于让我ACC了
分析:
步骤一:现将高度从矮到高排序,将同样高度而且为相邻的岛屿合并。
步骤二:循环,枚举如果淹没了i这个区域的岛屿数
如果这个区域的左边和右边都没有被淹没,就将岛屿数加一;如果这个区域的左边和右边都被淹没了,则岛屿数减一。如果当前岛屿数大于max,则更新最大值。


代码如下:

var  a,b,c:array[0..100001]of longint;i,j,ans,max,n,x,m:longint;procedure qsort(l,r:longint);
var  i,j,mid:longint;
beginif l>=r then exit;i:=l; j:=r; mid:=a[(l+r) div 2];repeatwhile a[i]<mid do inc(i);while a[j]>mid do dec(j);if i<=j thenbegina[0]:=a[i];a[i]:=a[j];a[j]:=a[0];b[0]:=b[i];b[i]:=b[j];b[j]:=b[0];inc(i);dec(j);end;until i>j;qsort(l,j);qsort(i,r);
end;beginassign(input,'islands.in');assign(output,'islands.out');reset(input);rewrite(output);readln(m);n:=0;for i:=1 to m dobeginreadln(x);if x<>c[n] thenbegininc(n);c[n]:=x;b[n]:=n;end;end;a:=c;qsort(1,n);ans:=1;for i:=1 to n dobeginif (c[b[i]-1]>c[b[i]])and(c[b[i]+1]>c[b[i]]) then inc(ans);if (c[b[i]-1]<=c[b[i]])and(c[b[i]+1]<=c[b[i]]) then dec(ans);if max<ans then max:=ans;end;write(max);close(input);close(output);
end.

这篇关于JZOJ 3.10 1540——岛屿的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/660146

相关文章

【代码随想录训练营第42期 续Day52打卡 - 图论Part3 - 卡码网 103. 水流问题 104. 建造最大岛屿

目录 一、做题心得 二、题目与题解 题目一:卡码网 103. 水流问题 题目链接 题解:DFS 题目二:卡码网 104. 建造最大岛屿 题目链接 题解:DFS  三、小结 一、做题心得 也是成功补上昨天的打卡了。 这里继续图论章节,还是选择使用 DFS 来解决这类搜索问题(单纯因为我更熟悉 DFS 一点),今天补卡的是水流问题和岛屿问题。个人感觉这一章节题对于刚

图论篇--代码随想录算法训练营第五十二天打卡| 101. 孤岛的总面积,102. 沉没孤岛,103. 水流问题,104.建造最大岛屿

101. 孤岛的总面积 题目链接:101. 孤岛的总面积 题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域,且完全被水域单元格包围。孤岛是那些位于矩阵内部、所有单元格都不接触边缘的岛屿。 现在你需要计算所有孤岛的总面积,岛屿面积的计算方式为组成岛屿的陆地的总数。 解题思路: 从周边找到陆地,然后通过 dfs或者bfs 将

图论篇--代码随想录算法训练营第五十一天打卡| 99. 岛屿数量(深搜版),99. 岛屿数量(广搜版),100. 岛屿的最大面积

99. 岛屿数量(深搜版) 题目链接:99. 岛屿数量 题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。 解题思路: 1、每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 2、遇到一个没有遍历过的节点陆地,计数器就加一,然后把该节点陆地所能遍历到的陆地都

3.10.输入型参数与输出型参数

指针才是C的精髓 3.10.输入型参数与输出型参数3.10.1、函数为什么需要形参与返回值3.10.2、函数传参中使用const指针3.10.3、函数需要向外部返回多个值时怎么办?3.10.4、总结 3.10.输入型参数与输出型参数 3.10.1、函数为什么需要形参与返回值 (1)函数名是一个符号,表示整个函数代码段的首地址,实质是一个指针常量,所以在程序中使用到函数名时都是

Jzoj 条件循环(while,do while) 部分代码(共25题)

1020: 【入门】编程求1+3+5+...+n #include <bits/stdc++.h>using namespace std;int n, sum;int main() {scanf("%d", &n);for(int i=1; i<=n; i+=2){sum+=i;} printf("%d", sum);return 0;} 1012: 【入门】两数比大小 #i

Jzoj 二维数组部分代码(共13题)

2788: 【入门】二维数组的输入输出 边输入边输出 #include <bits/stdc++.h>using namespace std;int n, m, a[11][11];int main(){scanf("%d %d", &n, &m);//边输入边输出for(int i=1; i<=n; ++i){for(int j=1; j<=m; ++j){scanf("%d", &

3.10 Browser -- useTitle

3.10 Browser – useTitle https://vueuse.org/core/useTitle/ 作用 响应式的修改document的标题 官方示例 import { useTitle } from '@vueuse/core'const title = useTitle()console.log(title.value) // print current title

秋招突击——算法练习——8/26——图论——200-岛屿数量、994-腐烂的橘子、207-课程表、208-实现Trie

文章目录 引言正文200-岛屿数量个人实现 994、腐烂的橘子个人实现参考实现 207、课程表个人实现参考实现 208、实现Trie前缀树个人实现参考实现 总结 引言 正文 200-岛屿数量 题目链接 个人实现 我靠,这道题居然是腾讯一面的类似题,那道题是计算最大的岛屿面积,如果当时没做出来,现在得哭死!好在做出来了!这道题单纯使用回溯实现的,然后修改一下地图的坐标

Day47 | 110.字符串接龙 105.有向图的完全可达性 106.岛屿的周长

110.字符串接龙 110. 字符串接龙 题目 题目描述 字典 strList 中从字符串 beginStr 和 endStr 的转换序列是一个按下述规格形成的序列:  1. 序列中第一个字符串是 beginStr。 2. 序列中最后一个字符串是 endStr。  3. 每次转换只能改变一个字符。  4. 转换过程中的中间字符串必须是字典 strList 中的字符串,且strLis

代码随想录day53 110. 字符串接龙 105.有向图的完全可达性 106. 岛屿的周长

代码随想录day53 110. 字符串接龙 105.有向图的完全可达性 106. 岛屿的周长 110. 字符串接龙 代码随想录 #include <iostream>#include <vector>#include <unordered_set>#include <unordered_map>#include <queue>using namespace std;int main(