长度相等时去起点小的
貌似每次写最长子串和时代码都不一样
#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; }