题意:给你一个序列,求一个连续子序列,使这个连续子序列的和的绝对值最少,输出最小是多少。
先求出每一个的前n项和,然后排序,找差值最小的就可以了。
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int a[1000010]; int main() { int i,j,k,l,m,n,max,min; int T=1; scanf("%d",&n); while(n--) { memset(a,0,sizeof(a)); scanf("%d",&m); a[0]=0; for(i=1;i<=m;i++) { scanf("%d",&l); a[i]=a[i-1]+l; } sort(a,a+m+1); max=a[m]-a[0]; for(i=0,min=10000000;i<m;i++) { k=a[i+1]-a[i]; if(min>k) min=k; } printf("Case %d: %d\n",T++,min); } }