【蓝桥杯】730. 机器人跳跃问题*(二分)

穿越隧道
【蓝桥杯】730. 机器人跳跃问题*(二分)_第1张图片

求最大值和最小值的问题,判断是否可以用二分,然后暴力、dp,或者贪心。

#include 
#include 
#include 
using namespace std;
const int N = 1e5 + 10;
int n;
int a[N];
bool chk(int x){
    for(int i = 0; i < n; i++){
        x = x * 2 - a[i];
        if(x < 0) return false;
        if(x >= 1e5) return true;//防止爆int
    }
    return true;
}
int main(){
    scanf("%d",&n);
    // cout << n << endl;
    for(int i = 0; i < n; i++) scanf("%d",&a[i]);
    int l = 0, r = 100000;//答案上限为1e5.
    while(l < r){//二分枚举
        int mid = (l + r) / 2;
        if(chk(mid)) r = mid;//因求最小
        else l = mid + 1;
    }
    printf("%d\n",l);
    return 0;
}

你可能感兴趣的:(acwing,蓝桥杯,c++,蓝桥杯,二分)