您的位置:首页 > 其它

南邮 OJ 2045 罗马PK

2015-08-08 10:29 274 查看


罗马PK

时间限制(普通/Java) : 1000 MS/ 2000 MS 运行内存限制 : 65536 KByte

总提交 : 202 测试通过 : 51

比赛描述

一天,机智的罗老师和小马哥想比试以下到底谁更机智,于是他们找到了一个很长的数列串,决定看谁能更快地算出这条长串中子串和的最大值。
这对于身经百战的神牛们通过编程来求解真是小菜一碟,现在想请你帮他们算出正确结果。
eg.长串为(6,-1,5,4,-7),那么子串的最大值为:
6+(-1)+5+4=14

输入

输入的第一行包含一个整数T(1<=T<=20)表示测试用例的数目。接下来有T行输入,每行以一个数N(1<=N<=100000)开头,然后接下来输入N个整数(所有的整数都在-1000到1000之间)。

输出

对于每个测试用例,你应该输出2行。第一行是 "Case
#:",#表示测试用例数。第二行包含3个整数,子串和的最大值,对应字串的开始位置,对应字串的结束位置。如果有超过一个的答案,输出第一个。每两个测试用例之间有一个空白行。

样例输入

2

5 6 -1 5 4 -7

7 0 6 -1 1 -6 7 -5

样例输出

Case 1:

14 1 4

Case 2:

7 1 6

提示

undefined

题目来源

B12040705

#include<iostream>
using namespace std;

int main(){
long T,N,i,j,a,sum,max_sum,b,begin,end;
cin>>T;
for(i=1;i<=T;++i){
cin>>N;
sum = 0;
max_sum = 0;
b = 1;
begin = 1;
end = 1;
for(j=1;j<=N;++j){
cin>>a;
sum += a;
if(sum<0){
sum = 0;
b = j+1;
}else if(sum>max_sum){
max_sum = sum;
begin = b;
end = j;
}
}
cout<<"Case "<<i<<":"<<endl;
cout<<max_sum<<" "<<begin<<" "<<end<<endl;
if(i<T){
cout<<endl;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: