永发信息网

合并果子 单调队列解法求解析 急!

答案:2  悬赏:10  手机版
解决时间 2021-02-03 20:46
求大牛给步骤解析
program fruit;
var
tot:array[0..20000] of longint;
quea,queb:array[0..10000] of longint;
i,j,n,la,lb,ra,rb,x,max,k,a1,a2,b1,b2,sum:longint;

procedure minx;
var i,j:longint;
begin
if (a1 begin
inc(la,2);
inc(rb,1);
queb[rb]:=a1+a2;
dec(k);
sum:=sum+a1+a2;
exit;
end;

if (b1 begin
inc(lb,2);
inc(rb,1);
queb[rb]:=b1+b2;
dec(k);
sum:=sum+b1+b2;
exit;
end;

inc(la,1);
inc(lb,1);
inc(rb,1);
queb[rb]:=a1+b1;
dec(k);
sum:=sum+a1+b1;
end;

begin
readln(n);
for i:=1 to n do
begin
read(x);
inc(tot[x]);
if x>max then max:=x;
end;
la:=1;lb:=1;ra:=0;rb:=0;
for i:=1 to max do
for j:=1 to tot[i] do
begin
inc(ra);
quea[ra]:=i;
end;
k:=n;
while k<>1 do
begin
a1:=0;a2:=0;b1:=0;b2:=0;
if la<=ra then a1:=quea[la] else a1:=maxlongint;
if la+1<=ra then a2:=quea[la+1] else a2:=maxlongint;
if lb<=rb then b1:=queb[lb] else b1:=maxlongint;
if lb+1<=rb then b2:=queb[lb+1] else b2:=maxlongint;
minx;
end;
writeln(sum);
end.
最佳答案
好简单~
用两个队列
比如:2 3 7 13
这是队列a
再搞一个队列b
使用头指针比较即可
2+3=5,5进b
a:2 3 7 13(头指针指向7)
b:5(指向5)

a:2 3 7 13(13)
b:5 12(12)

a:2 3 7 13
b:5 12 25
全部回答
支持一下感觉挺不错的
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
为什么我的USB接口传入数据正常,传出数据是
妈妈给我买了一件新衣服,这句话轻声的词语是
【身长腿短】什么动物身长腿短
市面上给医生使用的APP有哪些啊?或者医生可
吴记麻辣烫(花津北路)这个地址在什么地方,我
路灯坏了找什么部门
三星T190的显示器为什么没有1440x900这
绯红的意思是什么啊?知道的请说下!
2012年甘肃省高考人数
现代进口圣达菲发动机号在那里?
维红爱青霞写一首藏头诗
为什么PVC树脂700还比1000贵呢?
琼山区府城三角公园北门在什么地方啊,我要过
老母羊已经两年没生羔了,肉能好吃么
朋友们,要怎么在Amazon上买电子书然后放进Kin
推荐资讯
交通银行金华东阳支行地址在什么地方,想过去
轰磕的意思是什么啊?知道的请说下!
系连的意思是什么啊?知道的请说下!
铅砌的意思是什么啊?知道的请说下!
【对自己好一点】对自己好一点用英语怎么说
益成堂在哪里啊,我有事要去这个地方
上海哪里有卖木炭?
奔跑吧兄弟张天爱水涨了跳舞背景音乐
1.25乘以0.88用简便方法怎样计算
杰睿学校大兴二小地址在哪,我要去那里办事
如何提高托福阅读能力?
怎样去确定自己未来的职业方向
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?