新思路!!!!
查看原帖
新思路!!!!
1018182
ShaunSH楼主2024/7/18 20:26

讨论区应该没有雷同。 把每次回血与后面抵消,最后算总和,详见代码。

#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;
}
2024/7/18 20:26
加载中...