5.1 最小和

来源:互联网 发布:linux睡眠函数 编辑:程序博客网 时间:2024/06/17 06:53

/*****************直接求前缀和则 sum[i] - sum[j] 即为 i-j之间的元素之和 再进行从小到大排序由于是从小到大排序所以答案即为两两之间的差值如  前缀和序列 -3 -1 2 4 8对于 -3 显然只有-1与它的差值最小 注意: ans的起始值要取前缀和中绝对值最小的        用  __int64   *****************/#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>using namespace std;const int inf = 0x3f3f3f3f3f;const int maxn = 100000+5;__int64 sum[maxn]={0};int main(){int i, n;__int64 x,ans = inf;scanf("%d", &n);for(i=1; i<=n; i++) {scanf("%I64d", &x);sum[i] = sum[i-1] + x;int k = abs(x);if(k < ans) ans = k;}sort(sum+1, sum+n+1);for(i=1; i<=n; i++){x = abs(sum[i]-sum[i-1]);if(x < ans ) ans = x;}printf("%I64d\n", ans);return 0;}



0 0
原创粉丝点击