机器人跳跃问题
题目 机器人跳跃问题
思路分析
如果H(k+1)>E,那么机器人就失去H(k+1)−E的能量值,否则它将得到E−H(k+1)的能量值,那我们就可以写一个check函数,其中判断条件就是任何一步的能量值都不能小于0,如果小于0,就返回false,如果其中有任何一步使得能量大于最大高度返回true,否则就返回false
合并为e=2e-h[i]
可能爆int变负数 加个特判
代码实现
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
const int N=100010;
int n;
int h[N];
bool check(int m){
for(int i=1;i<=n;i++){
m=m*2-h[i];
if(m>=1e5)
return true;
if(m<0)
return false;
}
return true;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
cin>>h[i];
int l=0,r=1e5;
while(l<r){
int m=l+r>>1;
if(check(m))
r=m;
else
l=m+1;
}
cout<<r;
return 0;
}
💬 评论