个人思路:二分答案算法
该题具有单调性如所剩能量以及跳入下一个建筑的能量比较
故可以采用二分算法进行解决
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=200050;
ll a[N],n,mx,r,l,sum;
bool f(int energy,int max){
for(int i=0;i<n;i++){
if(energy<=a[i]){
energy-=a[i]-energy;
}
else {
energy+=energy-a[i];
}
if(energy>=max){
return true;
}
if(energy<0){
return false;
}
}
return true;
}
void solve(){
l=0,r=mx;ll ans=-1;
while(l<=r){
ll m=l+(r-l)/2;
if(f(m,mx)){
ans=m;r=m-1;
}
else {
l=m+1;
}
}
cout<<ans<<endl;
}
int main(){
int t=1;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];mx=max(mx,a[i]);
}
while(t--){
solve();
}
}