33,311
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
// 5 -1 4 33 0 9 error.
main(){
int T,count=0,i,l,r,N;
int sum1,sum2,max,max1,max2,a[100000];
scanf("%d",&T);
while(T--){
max=0;
sum1=0;
sum2=0;
count++;
scanf("%d",&N);
a[0]=N;
for(i=1;i<=N;i++){
scanf("%d",&a[i]);
}
//forward
max1=a[1];
l=1;
for(i=1;i<=N;i++){
sum1+=a[i];
if(max1<sum1){
max1=sum1;
l=i;
}
}
//reverse
max2=a[N];
r=N;
for(i=N;i>=1;i--){
sum2+=a[i];
if(max2<=sum2){ //r尽可能靠左 (出现0时选最先的序列
max2=sum2;
r=i;
}
}
if(l>=r){
for(i=r;i<=l;i++)
max+=a[i];
printf("case %d:\n%d %d %d",count,max,r,l);
}else{
if(max1>max2)max=max1;
else max=max2;
printf("case %d:\n%d %d %d",count,max,l,r);
}
printf("\n\n");
}
}