wikioi 1245最小的N个和
2013-09-08 10:12
LRJ的算法竞赛入门经典训练指南里有类似的题,原题要难很多,p189页
读入A,B两组中的所有数后,建立N个有序表:
A1+B1<A2+B1<A3+B1<...<AN+B1
A1+B2<A2+B2<A3+B2<...<AN+B2
...
A1+BN<A2+BN<A3+BN<...<AN+AN
将每个有序表的第一个数字(记作s)连同A,B的下标0推入优先队列,这样我们每一次取出队列中的队首,显然这个元素的s是最小的,输出。与此同时,我们需要延续这个有序表。在取出的结构体中,令其标号a加1,b的标号不变,那么,s=B[b]+A[a]。
实际操作时,因为b的标号不变,就可以不保存下标b以及数组B,直接将读入数组B改为读入每一个元素(记为k),并将s=k+a[1],a=1推入队列,每次取出元素后,令其a=a+1,s=s+A[a]-A[a-1],如此减少空间占用,只需要一个队列和一个保存A的数组
//By BLADEVIL
type
aa=record
num :array[..] of longint;
end;
bb=record
num,size :longint; end; var
x, y :aa;
n :longint;
heap :array[..] of bb;
t :longint; procedure swap(var a,b:longint);
var
z :longint;
begin
z:=a; a:=b; b:=z;
end; procedure qs(var xx:aa; low,high:longint);
var
i, j, z, c :longint;
begin
i:=low; j:=high; c:=xx.num[(i+j) div ];
while i<j do
begin
while c<xx.num[j] do dec(j);
while c>xx.num[i] do inc(i);
if i<=j then
begin
swap(xx.num[i],xx.num[j]);
inc(i); dec(j);
end;
end;
if i<high then qs(xx,i,high);
if j>low then qs(xx,low,j);
end; procedure init;
var
i :longint;
begin
read(n);
for i:= to n do read(x.num[i]);
for i:= to n do read(y.num[i]);
qs(x,,n);
qs(y,,n);
end; procedure up(x:longint);
begin
while (x>) and (heap[x].num<heap[x div ].num) do
begin
swap(heap[x].num,heap[x div ].num);
swap(heap[x].size,heap[x div ].size);
x:=x div ;
end;
end; procedure down(x:longint);
var
k :longint;
begin
k:=x;
while true do
begin
if (x<<<=t) and (heap[k].num>heap[x<<].num) then k:=x<<;
if (x<<+<=t) and (heap[k].num>heap[x<<+].num) then k:=x<<+;
if k=x then exit;
swap(heap[x].num,heap[k].num);
swap(heap[x].size,heap[k].size);
x:=k;
end;
end; procedure main;
var
i :longint;
begin
t:=;
for i:= to n do
begin
inc(t);
heap[t].num:=x.num[i]+y.num[];
heap[t].size:=;
up(t);
end;
for i:= to n do
begin
write(heap[].num,' ');
inc(t);
heap[t].num:=heap[].num-y.num[heap[].size]+y.num[heap[].size+];
heap[t].size:=heap[].size+;
up(t);
heap[].num:=heap[t].num;
heap[].size:=heap[t].size;
dec(t);
down(); end;
writeln;
end; begin
init;
main;
end.
wikioi 1245最小的N个和的更多相关文章
- codevs 1245 最小的N个和
1245 最小的N个和 http://codevs.cn/problem/1245/ 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N ...
- 1245 最小的N个和
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有两个长度为 N 的序列 A 和 B, ...
- 1245 最小的N个和(前k小ai+bi)
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N ...
- code vs 1245 最小的N个和
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 有两个长度为 N 的序列 A ...
- Codevs No.1245 最小的N个和
2016-05-31 18:52:15 题目链接: 最小的N个和 Codevs No.1245 题目大意: 给两个等长数列,各取一个数求和,找到最小的N组 解法: 堆优化的大暴力 直接枚举所有可能在最 ...
- CODEVS 1245 最小的N个和 堆+排序
原题链接 http://codevs.cn/problem/1245/ 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求 ...
- AC日记——最小的N个和 codevs 1245
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N ...
- 最小的N个和(codevs 1245)
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N ...
- codevs 必做:堆:1245、2879 并查集:1069、1074、1073
1245 最小的N个和 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 有两个长度为 N ...
随机推荐
- java_hdfs之读写文件
package hdfsTest.answer.hdfs; import java.io.IOException; import java.net.URI; //import java.net.URL ...
- Scala学习笔记(四):从文件里读取文本行
第一个版本: import scala.io.Source if(args.length>0){ for(line<-Source.fromFile(args(0)).getLines) ...
- (1)分布式下的爬虫Scrapy应该如何做-安装
关于Scrapy的安装,网上一搜一大把,一个一个的安装说实话是有点麻烦,那有没有一键安装的?答案显然是有的,下面就是给神器的介绍: 主页:http://conda.pydata.org/docs/ 下 ...
- javascript中容易出bug的语句
一.forEach方法 forEach方法中没法用continue来实现跳过单句到下一次循环,如果要跳到下一次循环,要用return关键字,如果想直接跳出forEach循环,具我所知的,要throw一 ...
- 【UML】活动图介绍
1.活动图,即Activity Diagram,是UML中用于对系统的动态行为建模的一种常用工具,它描述活动的顺序,展现从一种活动到另一种活动的控制流.其本质上是一种流程图,着重表现从一个活动到另一个 ...
- css如何选择相同class下的第一个class元素和最后一个元素?
如图,如果像选择类名为 class="exerciseInfo" 中的第一个和最后一个div,做法如下: 选择第一个类名: .exerciseInfo: nth-of-type ...
- winspool.drv
public partial class Form1 : Form{ [System.Runtime.InteropServices.DllImportAttribute("winspool ...
- WebKit 渲染过程
webkit笔记,主要来自 朱永盛 <WebKit技术内幕> 学习笔记,转载就注明原著,该书是国内仅有的Webkit内核的书籍,学习的好导师,推荐有兴趣的朋友可以购买 Webkit渲染过程 ...
- Configuring Dojo with dojoConfig - The Dojo Toolkit
转载自Dojo官网 Configuring Dojo with dojoConfig The dojoConfig object (formerly djConfig) allows you to s ...
- P4109 [HEOI2015]定价
题目描述 在市场上有很多商品的定价类似于 999 元.4999 元.8999 元这样.它们和 1000 元.5000 元和 9000 元并没有什么本质区别,但是在心理学上会让人感觉便宜很多,因此也是商 ...