当前位置:首页 > 编程笔记 > 正文
已解决

730. 机器人跳跃问题--二分

来自网友在路上 154854提问 提问时间:2023-10-28 17:13:39阅读次数: 54

最佳答案 问答题库548位专家为你答疑解惑

题目:

730. 机器人跳跃问题 - AcWing题库

思路: 二分

1.当起始能量E大于最大建筑高度1e5 时,E的能量在整个条约过程中全程递增,则大于E的初始能量也必然成立(满足二段性)。故最小初始能量范围为[0,1e5](确定了二分范围)。

2.满足二分条件,可用二分!!!

代码: 

//二分
/*二段性:当起始能量E满足机器人跳跃过程E!=0的条件时,比初始值E大的值也必然成立*/
#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e5+10;
int h[N],n;bool check(int e)
{for(int i=1;i<=n;i++){//遍历机器人到达每座建筑上的能量Ee=2*e-h[i];if(e<0)return false;//在到达最后的第n座建筑前<=0,必然会出现负,说明e取小了if(e>=1e5)return true;//如果到达某座建筑上时的能量大于等于建筑高度最大值,//那机器人在后面的跳跃过程中必然是递增的,不可能为0}return true;
}int main()
{cin>>n;for(int i=1;i<=n;i++)scanf("%d",&h[i]);int L=1,R=1e5;while(L<R){int mid=L+R>>1;//二分if(check(mid))R=mid;else L=mid+1;}cout<<L;
}

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"730. 机器人跳跃问题--二分":http://eshow365.cn/6-26944-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!