https://vjudge.net/problem/HDU-1003
注意考虑如果全为负的情况,特判。
还有输出格式,最后一个输出不用再空行。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cstdlib> 6 #include<cmath> 7 #define lson l, m, rt<<1 8 #define rson m+1, r, rt<<1|1 9 #define IO ios::sync_with_stdio(false);cin.tie(0); 10 #define INF 1e9 11 typedef long long ll; 12 using namespace std; 13 int n, m, a[100010]; 14 int main() 15 { 16 IO; 17 cin >> n; 18 int kase=0; 19 while(n--){ 20 cin >> m; 21 for(int i = 0; i < m; i++){ 22 cin >> a[i]; 23 } 24 int sum = 0, maxm = -INF; 25 int from = 0; 26 int ans1 = 0, ans2 = -1; 27 for(int i = 0; i < m; i++){ 28 sum += a[i]; 29 if(sum < 0){ 30 sum = 0; 31 from = i+1; 32 } 33 else{ 34 if(sum > maxm){ 35 maxm = sum; 36 ans1 = from; 37 ans2 = i; 38 } 39 } 40 } 41 cout << "Case " << ++kase << ":" << endl; 42 if(ans2 == -1){//sum一直小于零,每位<0 43 maxm = -INF; 44 for(int i = 0; i < m; i++){ 45 if(a[i] > maxm){ 46 maxm = a[i]; 47 ans1 = i; ans2 = i; 48 } 49 } 50 cout << maxm << " " << ans1+1 << " " << ans2+1 << endl; 51 } 52 else 53 cout << maxm << " " << ans1+1 << " " << ans2+1 << endl; 54 if(n != 0) cout << endl; 55 } 56 return 0; 57 }