AcWing 730,史上最全最精简的学习路线图
编号为 0 的建筑高度为 0 个单位,编号为 i 的建筑高度为 H(i)个单位。
起初,机器人在编号为 0 的建筑处。
每一步,它跳到下一个(右边)建筑。
假设机器人在第 k 个建筑,且它现在的能量值是 E,下一步它将跳到第 k+1 个建筑。
如果 H(k+1)>E,那么机器人就失去 H(k+1)-E 的能量值,否则它将得到 E-H(k+1)的能量值。
游戏目标是到达第 N 个建筑,在这个过程中能量值不能为负数个单位。
现在的问题是机器人至少以多少能量值开始游戏,才可以保证成功完成游戏?
输入格式
第一行输入整数 N。
第二行是 N 个空格分隔的整数,H(1),H(2),…,H(N)代表建筑物的高度。
输出格式
输出一个整数,表示所需的最少单位的初始能量值上取整后的结果。
数据范围
1≤N,H(i)≤105,
输入样例 1:
5
3 4 3 2 4
输出样例 1:
4
输入样例 2:
3
4 4 4
输出样例 2:
4
输入样例 3:
3
1 6 4
输出样例 3:
3
2.思路
思路:二分,答案所在区间为 1-1e5,具有单调性,且当 x>=E(min),从 E(min)往后的区间值都可以完成整个游戏,因此可以将整个区间一分为二,我们二分求边界 E(min)。
我们发现这样一个性质:当能量值大于游戏中建筑的最高值时,跳过最高建筑时能量值不变,在跳高度低于最高建筑时,能量值一直在增加,因此可以完成整个游戏。
当 H(k+1)>E,E=E-(H(k+1)-E)=2_E+H(k+1)
当 H(k+1)<=E,E=E+(E-H(k+1))=2_E+H(k+1) 综上在跳跃过程中,计算能量值公式为:E=2*E-H(k+1)
3…AC 代码
复制代码
评论