Codeforces Round #613 (Div. 2) B. Just Eat It!(前缀和)

题意:

一个长为n的序列,是否存在与原序列不同的连续子序列,其元素之和大于等于原序列。

思路:

从前、后分别累加,若出现非正和,除此累加序列外的子序列元素之和一定大于等于原序列。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
 
bool solve(){
    int n;cin>>n;
    int a[n];for(int &i:a) cin>>i;

    ll sum=0; 
    for(int i=0;i<n;i++){
        sum+=a[i];
        if(sum<=0) return 0;
    }

    sum=0;
    for(int i=n-1;i>=0;i--){
        sum+=a[i];
        if(sum<=0) return 0;
    }
    
    return 1;
}    
 
int main(){
    int t;cin>>t;
    while(t--)
        cout<<(solve()?"YES":"NO")<<"
";
 
    return 0;
}
原文地址:https://www.cnblogs.com/Kanoon/p/12494678.html