AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P2533. 攀登者2

困难通过率 38% · 提交 224 · 通过 84
模拟贪心数学

小慕最近迷上了登山探险,他手里有一张特殊的地图,想评估一下哪些山峰可以安全攀登并返回地面。 这张地图用一个一维数组表示,数组的索引代表水平位置,数组的值代表该位置的海拔高度。其中,元素 `0` 表示地面。 例如,数组 `[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0]` 对应下图所示的地形。地图中有两个山脉,分别位于索引 `1,2,3,4,5` 和 `8,9,10,11,12,13`,最高峰高度分别为 `4` 和 `3`,最高峰位置分别为 `3` 和 `10`。 一个山脉中可能包含多个山峰(山峰的定义是:高度大于相邻位置的高度,或者在地图边界且高度大于相邻的高度)。

                4

              +---+
              |   |
              |   | 3                       3
              |   |
              |   +---+                   -----
              |       |                   |   |
            2 |       |                 2 |   |     2
              |       |                   |   |
          +---+       |               ----+   |   +---+
          |           |               |       |   |   |
        1 |           | 1           1 |       | 1 |   | 1
          |           |               |       |   |   |
      +---+           +---+       +---+       +---+   +---+
      |                   |       |                       |
    0 |                   | 0   0 |                       | 0
      |                   |       |                       |
  +---+                   +-------+                       +---+

    0   1   2   3   4   5   6   7   8   9  10  11  12  13  14

登山过程中,小慕会消耗体力(整数)。上坡时,每上升一个单位高度差,消耗 2 倍的体力;下坡时,每下降一个单位高度差,消耗 1 倍的体力;在平地上行走不消耗体力。当体力消耗到零时,小慕会有生命危险。 例如,在上图的山峰中:从索引 `0` 走到索引 `1`,高度差为 `1`,需要消耗 `2×1=2` 体力;从索引 `2`(高度 `2`)走到索引 `3`(高度 `4`),需要消耗 `2×2=4` 体力;从索引 `3` 走到索引 `4`,则消耗 `1×1=1` 体力。 小慕想知道,在这张地图中,有多少座山峰是可以从地面出发、成功登顶并安全返回地面的,且在整个过程中不会出现体力耗尽的情况。 例如上图中的数组,共有 `3` 个不同的山峰。其中,登上位于索引 `3` 的山峰,可以从索引 `0` 或索引 `6` 出发。如果从索引 `0` 出发登顶,需要消耗

提示:带虚线的词点一下有通俗解释。

输入描述

第一行输入 一个长度为N的数组,表示地图。 第二行输入最大体力。

输出描述

输出一个数字,地图中可以攀登到达的山峰数量

示例

示例 1

输入

0,1,4,3,1,0,0,1,2,3,1,2,1,0
11

输出

2

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
0 1 2 3 4 5 6 7 8 9 1 2 4 3 1 1 2 ▲ 峰 ▲ 峰 路线 0→3→0 消耗 12 体力
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「攀登者2」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。