题目描述:
N 个数排成一排,你可以任意选择连续的若干个数,算出它们的和。问该如何选择才能

使得和的绝对值最小。

如:N=8 时,8个数如下:

1    2    3     4    5    6    7    8

-20 90 -30 -20 80 -70 -60 125

如果我们选择1到 4这4个数,和为20,还可以选择 6到 8这 3个数,和为-5,|-5|=5,

该方案获得的和的绝对值最小。

输入格式:

第一行输入N,表示数字的个数。接下来N 行描述这N 个数字。

输出格式:

第一行输出一个整数,表示最小绝对值的和,第二行包含一个整数表示形成该绝对值

和最长序列的长度。

数据说明:

40%的数据 N<=4000

对于许多数据,最长序列的长度唯一。

100%的数据 N<=100000,|每个数字的值|<=10^10

输入:

8
-20
90
-30
-20
80
-70
-60
125

输出:
5
3

思路:1:暴力枚举,枚举首端点,尾端点,然后用O(n)的时间算出和,时间复杂度O(n^3);炸破天际

2:优化方法一,运用前缀和思想,用O(1)算出L到R的和,总时间O(n^2); 好像还是不行。

3:正解:思考方案2,对于每个R,我们要找到一个L使L的前缀和-R的前缀和最小,然后,我们想要快速找到,

想一下,对于一个序列,怎样的两个数相减的绝对值最小?显然,是大小相邻的两个数,因为如果中间隔了数,一定不如大小相邻的数优

有了这样的思想,我们可以将求得的前缀和数组排序,然后,相邻两数两两相减,这样,用O(1)的时间复杂度就可以算出结果。

 program ex01;
var a,f,pl:array[..] of int64;
n,ans,ll:int64;
function max(a,b:longint):longint;
begin
if a>b then exit(a);
exit(b);
end;
function min(a,b:longint):longint;
begin
if a<b then exit(a);
exit(b);
end;
procedure init;
var i:longint;
begin
readln(n);
for i:= to n do
begin
readln(a[i]);
f[i]:=f[i-]+a[i];
pl[i]:=i;
end;
end;
procedure qsort(l,r:longint);
var i,j,p,mid:int64;
begin
i:=l; j:=r; mid:=f[(i+j) div ];
repeat
while f[i]<mid do inc(i);
while f[j]>mid do dec(j);
if i<=j then
begin
p:=f[i]; f[i]:=f[j]; f[j]:=p;
p:=pl[i]; pl[i]:=pl[j]; pl[j]:=p;
inc(i); dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end;
procedure doit;
var i:longint;
begin
ans:=maxlongint;
for i:= to n+ do
begin
if abs(f[i]-f[i-])=abs(ans) then
if max(pl[i],pl[i-])-min(pl[i],pl[i-])>ll then
ll:=max(pl[i],pl[i-])-min(pl[i],pl[i-]);
if abs(f[i]-f[i-])<abs(ans) then
begin
ans:=abs(f[i]-f[i-]);
ll:=max(pl[i],pl[i-])-min(pl[i],pl[i-]);
end;
end;
end;
procedure print;
begin
writeln(ans);
writeln(ll);
end;
begin
init;
qsort(,n+);
doit;
print; end.

最小和(min)的更多相关文章

  1. LeetCode 155:最小栈 Min Stack

    LeetCode 155:最小栈 Min Stack 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- ...

  2. [Swift]LeetCode155. 最小栈 | Min Stack

    Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. pu ...

  3. 实现O(1)时间复杂度带有min和max 函数的栈

    仅仅是演示实现.不考虑栈使用的数据结构是vector 还是其它容器. 代码例如以下 #include <iostream> #include <vector> using na ...

  4. 计算int数组中的最大,最小,平均值

    public static void testNumber(int[] arr) { int max = arr[0]; int min = arr[0]; int avg = 0; int sum ...

  5. POJ 1966 Cable TV Network 【经典最小割问题】

    Description n个点的无向图,问最少删掉几个点,使得图不连通 n<=50 m也许可以到完全图? Solution 最少,割点,不连通,可以想到最小割. 发现,图不连通,必然存在两个点不 ...

  6. 【最小割】【网络流24题】【P2762】 太空飞行计划问题

    Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需要使 ...

  7. Python min() 方法

    描述 Python min() 方法返回字符串中最小的字母(26个字母中最小的是A). 语法 min() 方法语法: min(S) 参数 S -- 字符串. 返回值 返回字符串中最小的字母. 实例 以 ...

  8. leetcode算法学习----155. 最小栈(MinStack )

    下面题目是LeetCode算法155题: https://leetcode.com/problems/min-stack/ 题目1:最小函数min()栈 设计一个支持 push,pop,top 操作, ...

  9. Mipmap与纹理过滤

    为了加快渲染速度和减少纹理锯齿,贴图被处理成由一系列被预先计算和优化过的图片组成的文件,这样的贴图被称为Mipmap. 使用DirectX Texture Tool(DX自带工具)预生成Mipmap ...

随机推荐

  1. Delphi 中记录类型 给记录指针赋值。

    PPersion=^TPersion;  TPersion=packed record     Name:string;     Sex:string;     Clasee:string;  end ...

  2. Proxy(代理)-对象结构型模式

    1.意图 为其它对象提供一种代理以控制对这个对象的访问. 2.别名 Surrogate. 3.动机 通过Proxy可以达到对一个对象的访问控制. 4.适用性 远程代理  为一个对象在不同地址空间提供局 ...

  3. windows与linux之间文件的传输方式总结(转)

    当然,windows与linux之间文件的传输的两种方式有很多,这里就仅仅列出工作中遇到的,作为笔记: 方法一:安装SSH Secure Shell Client客户端 安装即可登录直接拖拉到linu ...

  4. xtrareport实现指定记录数以及填补空白行(网上整理)

    在Detail的事件中: int i=0; private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventAr ...

  5. 反射,System.Type类

    http://m.blog.csdn.net/blog/woddle/40623333 两个现实中的例子:1.B超:大家体检的时候大概都做过B超吧,B超可以透过肚皮探测到你内脏的生理情况.这是如何做到 ...

  6. jquery 清空 iframe 的内容,,iframe自适应高度

    $(iframe).contents().find("body").html(""); iframe自适应高度 $("#AllDescription& ...

  7. js jQuery中文字符串比较

    先说下普通字符串(英文)比较: 一般使用双等来判断(==),如果还需要类型相同那么就用三等(===) 1. 双等(==)是完全向后兼容的,如果两个操作数类型不一致,它会在某些时候自动对操作数进行类型转 ...

  8. 第三章 EnumUtil根据值获取枚举对象

    项目中使用枚举类的好处这里不再赘述,在使用枚举值时,通常需要根据值来获取枚举对象,下面介绍两种实现方案: 1.在枚举类中定义方法实现 首先给出如下性别枚举类: public enum SexEnum ...

  9. 前端tip

    background简写 参考地址 http://css.doyoe.com/ 缩写:background:url(test1.jpg) no-repeat scroll 10px 20px/50px ...

  10. Spring 4 官方文档学习(十四)WebSocket支持

    个人提示:如果需要用到页面推送,高频且要低延迟,WebSocket无疑是最佳选择.否则还是轮询和long polling吧. 做了一个小demo放在码云上,有兴趣的可以看一下,简单易懂:websock ...