长度相等时去起点小的
貌似每次写最长子串和时代码都不一样
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int N = 20000+10;
int num[N];
int main(void)
{
// freopen("1.txt", "r", stdin);
// freopen("2.txt", "w", stdout);
int kase, n, cnt = 1;
scanf("%d", &kase);
while(kase--)
{
scanf("%d", &n);
memset(num, 0, sizeof(num));
int ok = 0;
for(int i = 1;i < n;i++)
{
scanf("%d", &num[i]);
if(num[i] > 0)
ok = 1;
}
int s = 1, e = 1, pos = 1, sum = num[1], _max = num[1];
for(int i = 2;i < n;i++)
{
if(sum < 0)
{
pos = i;
sum = 0;
}
sum += num[i];
if((_max < sum) || (_max == sum && i-pos > e-s))
{
_max = sum;
s = pos;
e = i;
}
}
if(ok)
printf("The nicest part of route %d is between stops %d and %d\n", cnt++, s, e+1);
else
printf("Route %d has no nice parts\n", cnt++);
}
return 0;
}