C. Theofanis‘ Nightmare
原题链接 :
Problem - 1903C - Codeforces
思路 :
创建一个后缀和数组 , 然后把所有后缀和>0的加入到答案中,注意,整个数组的和一定要加入答案中 ;
代码
java :
package sf;import java.util.Scanner;
import java.util.* ;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in) ;int t = sc.nextInt() ;StringBuilder sb = new StringBuilder() ;while(t--!=0){int n = sc.nextInt() ;long[] a = new long[n + 1] ;long[] ed = new long[n+1] ;for(int i=1;i<=n;i++){a[i] = sc.nextInt() ;}ed[n] = a[n] ;for(int i=n-1;i>=1;i--){ed[i] = ed[i+1]+a[i] ;} long ans = ed[1] ;for(int i=2;i<=n;i++){if(ed[i]>0){ans += ed[i] ;}}sb.append(ans).append('\n') ;}System.out.println(sb);sc.close() ;}
}
C++
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define endl '\n'
using namespace std;
typedef long long LL;
const int N = 2e5 + 10 ;LL a[N] ,ed[N] ;inline void solve(){int n ; cin >> n ;for(int i=1;i<=n;i++) cin >> a[i] ;ed[n] = a[n] ;for(int i=n-1;i>=1;i--) ed[i] = ed[i+1]+a[i] ;LL ans = ed[1] ;for(int i=2;i<=n;i++){if(ed[i]>0){ans += ed[i] ;}}cout << ans << endl ;
}signed main(){IOSint _ = 1;cin >> _;while(_ --) solve();return 0;
}