【二分】机器人跳跃问题

题目:机器人跳跃问题

判断E>1e5是因为每次乘2会导致超过int

#include
#include
#include
#include

using namespace std;

const int N = 1e5 + 10;

int n, H[N];

bool check(int E){
    for(int i = 0; i < n; i++){
        E = 2 * E - H[i];
        if(E < 0)   return false;
        if(E > 1e5) return true;
    }
    if(E >= 0)   return true;
    else    return false;
}

int main(){
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> H[i];
    }
    
    int l = 1, r = 1e5;
    while(l < r){
        int mid = (l + r)/2;
        if(check(mid))  r = mid;
        else    l = mid + 1;
        
    }
    
    cout << l;
    
}

 

你可能感兴趣的:(2022年初蓝桥杯练习,蓝桥杯,c++,职场和发展)