zoukankan      html  css  js  c++  java
  • 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;
    begin
      if l>=r then exit;
      i:=l; j:=r; mid:=a[(l+r) div 2];
      repeat
        while a[i]<mid do inc(i);
        while a[j]>mid do dec(j);
        if i<=j then
          begin
            a[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;
    
    begin
      assign(input,'islands.in');
      assign(output,'islands.out');
      reset(input);
      rewrite(output);
      readln(m);
      n:=0;
      for i:=1 to m do
        begin
          readln(x);
          if x<>c[n] then
            begin
              inc(n);
              c[n]:=x;
              b[n]:=n;
            end;
        end;
      a:=c;
      qsort(1,n);
      ans:=1;
      for i:=1 to n do
        begin
          if (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.
    
  • 相关阅读:
    LInux 安装 MySQL
    JS BUG 传递数字过大,数据值会变化
    tabs 标签样式
    【异常】IOException parsing XML document from class path resource [xxx.xml]
    云服务器启动tomcat巨慢,很慢
    Linux修改/etc/profile配置错误command is not found自救方法
    linux 安装 vsftpd服务
    为什么说 Vue 的响应式更新比 React 快
    在idea中使用git拉去最新代码并merge到本地代码中
    解决重新打开一个项目,idea需要重新配置maven的问题
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412377.html
Copyright © 2011-2022 走看看