机器人跳跃问题

题目 机器人跳跃问题

image-9ac3091f

思路分析

如果H(k+1)>E,那么机器人就失去H(k+1)−E的能量值,否则它将得到E−H(k+1)的能量值,那我们就可以写一个check函数,其中判断条件就是任何一步的能量值都不能小于0,如果小于0,就返回false,如果其中有任何一步使得能量大于最大高度返回true,否则就返回false

image-c600aa31

合并为e=2e-h[i]

image-7d193679

可能爆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;

}

同类题型

视频讲解


⬅️ 有效完美平方 🏠 00-刷题理模型 ➡️ 楼梯