讨论区应该没有雷同。
把每次回血与后面抵消,最后算总和,详见代码。
#include<cstdio>
using namespace std;
long long n,a[10000005],x,ans=1;
int main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
for(int i=1;i<=n;){
if(a[i]>0){
x=a[i];
a[i]=0;
while(x>0&&i<=n){
i++;
if(a[i]>=0){
x+=a[i];
a[i]=0;
}
else{
if(x<-a[i]){
a[i]+=x;
x=0;
}
else{
x+=a[i];
a[i]=0;
}
}
}
}
i++;
}
for(int i=1;i<=n;i++){
ans-=a[i];
}
printf("%lld",ans);
return 0;
}