题目

image

题解

如果H[k+1]>e,那么e=e-(h[k+1]-e)
如果h[k+1]<e,那么e=e+(e-h[k+1))
所以不管大于还是小鱼,e=2*e-h[k+1]
对于初始的e,如果e满足条件那么,比e大的初始值肯定也能满足条件,由此想到二分法

#include<iostream>
using namespace std;
const int N=1e5+10;
int n,h[N];
bool check(int e){
    for(int i=1;i<=n;i++){
        e=e*2-h[i];
        if(e>=1e5)return true;
        if(e<0)return false; 
    }
    return true;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        scanf("%d",&h[i]);
    }   
    int l=0,r=1e6+10;
    while(l<r){
        int mid=(l+r)>>1;
        if(check(mid))r=mid;
        else l=mid+1;
    }
    cout<<l<<endl;
    return 0;
}