http://acm.nyist.net/JudgeOnline/problem.php?pid=422
字串和之差
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
4
-
描述
-
给出一个数列{a
1,a
2,a
3,a
4……a
n},选出一个连续非空子序列,使该序列的绝对值max最大,再选出一个非空子序列(与第一个序列的选择无关),使该序列的绝对值min最小。输出max与min的差值。
-
输入
-
第一行是一个整数m(m<15)表示测试数据的组数。
每组数据第一行是一个整数 n(n<1000000),表示这个数列元素的个数,接下来一行是n个整数x(-100<x<100)。
输出
- 输出max与min的差值(max-min).每组数据输出占一行。 样例输入
-
2 4 -1 1 3 2 5 2 3 -2 4 1
样例输出
-
6 7
-
第一行是一个整数m(m<15)表示测试数据的组数。
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int MAX = 1000000 + 10;
int a[MAX];
int main() {
int T;
scanf ("%d", &T);
while (T--) {
int n, s;
scanf ("%d", &n);
a[0] = 0;
for (int i = 1; i <= n; i++) {
scanf ("%d", &s);
a[i] = a[i - 1] + s;
}
sort(a, a + n + 1);
int max = a[n] - a[0];
int Min = 9999;
for (int i = 1; i <= n; i++) {
Min = min(Min, (a[i] - a[i - 1]));
}
printf ("%d\n", max - Min);
}
}