#include <bits/stdc++.h>
using namespace std;
int N;
const int MAXN = 1e5 + 100;
int H[MAXN];
int MAXN1 = 1e9 + 10;
int deal(long long E,int maxH){
for(int i = 1;i<=N;i++){
E = 2 * E - H[i];
if(E < 0){
return -1;
}
else if(E >= maxH){
return 1;
}
}
return 1;
}
int solve(int l,int r,int Max){
int mid;
while(l + 1 < r){
mid = (l + r) >> 1;
// 能量太小
if(deal(mid,Max) == -1){
l = mid;
}
else{
r = mid;
}
}
return r;
}
int main(){
cin >> N;
int Max = -1;
for(int i = 1;i<=N;i++){
cin >> H[i];
Max = max(Max,H[i]);
}
int ans = solve(0,1e5,Max);
cout << ans;
}
机器人跳跃问题求解ACWING730题
于 2023-05-31 14:31:13 首次发布