活说这道题,“如果最大连续子序列不唯一,则输出序号i和j最小的那个(如输入样例的第2、3组)。”这句话!有病!!
如果测试数据是
3
0 1 2
结果应该是 3 0 2,可是OJ的数据是 3 1 2,如果不是看到Discuss里有人提醒,我一个月也找不出错误来!!
不说了,气愤!!看代码:
#include <stdio.h>
#define N 10010
#define inf 0x7fffffff
int main()
{
int a[N];
int n, i, sum, f, max;
//freopen("data.in", "r", stdin);
while(scanf("%d", &n), n)
{
int x = 0;
for(i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
if(a[i] < 0) x++;
}
if(x != n)
{
max = -inf; sum = 0; f = 1;
int f1, f2;
for(i = 1; i <= n; i++)
{
sum += a[i];
if(sum > max)
{
max = sum; f1 = f; f2 = i;
}
if(sum <= 0)
{
sum = 0;
f = i+1;
}
}
printf("%d %d %d\n", max, a[f1], a[f2]);
}
else
{
printf("0 %d %d\n", a[1], a[n]);
}
}
return 0;
}