730. 机器人跳跃问题

摘要
Title: 730. 机器人跳跃问题
Tag: 二分
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

730. 机器人跳跃问题

  • 题意

    机器人正在玩一个古老的基于 DOS 的游戏。
    游戏中有 N+1 座建筑——从 0 到 N 编号,从左到右排列。
    编号为 0 的建筑高度为 0 个单位,编号为 i 的建筑高度为 H(i) 个单位。
    起初,机器人在编号为 0 的建筑处。
    每一步,它跳到下一个(右边)建筑。
    假设机器人在第 k 个建筑,且它现在的能量值是 E,下一步它将跳到第 k+1 个建筑。
    如果 H(k+1)>E,那么机器人就失去 H(k+1)−E 的能量值,否则它将得到 E−H(k+1) 的能量值。
    游戏目标是到达第 N 个建筑,在这个过程中能量值不能为负数个单位。
    现在的问题是机器人至少以多少能量值开始游戏,才可以保证成功完成游戏?

  • 思路

    二分即可,能量值的范围在[0, max]之间

  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    '''
    Author: NEFU AB-IN
    Date: 2022-03-22 20:11:59
    FilePath: \ACM\Acwing\730.py
    LastEditTime: 2022-03-22 20:12:00
    '''


    def check(e):
    for i in range(n):
    if a[i] > e:
    e -= (a[i] - e)
    else:
    e += (e - a[i])
    return e >= 0


    n = int(input())
    a = list(map(int, input().split()))

    l, r = 0, max(a)
    while l < r:
    mid = l + r >> 1
    if check(mid):
    r = mid
    else:
    l = mid + 1
    print(r)
使用搜索:谷歌必应百度