2.5机器人跳跃问题

题目描述:

2.5机器人跳跃问题

2.5机器人跳跃问题

AC代码:

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 100010;
int h[N];
int n;

bool check(int e)
{
    for (int i = 1; i <= n; i ++)
    {
        e = e * 2 - h[i];           // 这里有一个坑点,就是e的值可能较大,2倍e可能爆int
        if (e < 0) return false;
        if (e >= N) return true;
    }
    
    return true;
}

int main()
{
    scanf("%d", &n);                // 本题输入的数据量较大,少用cin
    for (int i = 1; i <= n; i ++)
        scanf("%d", &h[i]);
    
    int l = 0, r = N;               // e的范围应该需要开到1e5
    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid))             // 包括mid点的左区间
            r = mid;
        else    
            l = mid + 1;
    }
    
    printf("%d\n", l);
    
    return 0;
}
上一篇:GPS数据处理


下一篇:[Node]报错:gyp verb check python checking for Python executable "python2" in the PATH