题目描述:
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. 永久解决火狐浏览器出现的flash版本更新问题

    最近使用的火狐浏览器又出问题了,老是出现flash版本太旧,以至于在火狐的版本出现“该版本存在安全隐患,应当更新”的字样.对于火狐浏览器,我很早就开始使用了,flash版本更新的问题,我也有我的一些小 ...

  2. 又一种XML的解析方法

    [Fact(DisplayName="用户名为空")] public void Should_UsernameEmpty() { var paras = new Dictionar ...

  3. 二叉树基本操作C++

    #include <cstdio> #include <climits> #include <cassert> #include <iostream> ...

  4. Hdu OJ 5965 扫雷(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5965 题目大意:中文题,自己读 解图思路:对于每一列都有三种情况--0, 1, 2. 如果第一列确定地 ...

  5. 动态调用webservice及WCF服务

    动态调用web服务,该方法只针对Web service, WCF的服务不行,如果是WCF的就通过工具直接生产代理类,把代理类配置到调用的项目中,通过配置客户端的终结点动态的取实现: 通过Svcutil ...

  6. laravel中日志为daily时如何设置最大保存天数

    在laravel中,日志设置为daily时,默认保存七天的日志,超过则清除七天前的日志.可修改默认的设置,假如要保存30天的日志,则配置如下: 在配置文件config/app.php中添加如下代码: ...

  7. sublimeText3安装emmet(For Mac)

    每次重装st,安装emmet都困难重重,对上一次依照网上查的资料一步步做好了,这次又忘了如何操作,结果又是网上搜索打开一箩筐的网页. 终于决定,把这些惨痛的经历记录下来,要用的话自己看,也可能可以帮助 ...

  8. Architecture.the-reactive-manifesto

    The Reactive Manifesto (Chinese Edition) Reference 1. The Reactive Manifesto http://www.reactivemani ...

  9. 关于unity3D的学习感想

    在老师布置团队项目后组长确定项目是做游戏是,我才接触的Unity3D游戏引擎. 因为一开始我没有接触过这类软件,更没有用过.所以作为一个新手,做好的办 法实在网上找教程.网上说Unity3D是由Uni ...

  10. 20151207Study

    Liberal lawmakers proposed a bill to reduce the cost of medicine for older Americans.自由主义立法者提出一条减少老年 ...