- 合并果子
- 2009-07-24 20:49:33 @
program fendui;
var
a:array [1..20000] of longint;
i,j,k,l,m,n:longint;
begin
readln(n);
for i:=1 to n do read (a[i]);
for i:=1 to n-1 do
for j:=i+1 to n do
begin
if a[i]>a[j]
then begin
k:=a[i];
a[i]:=a[j];
a[j]:=k;
end;
end;
for i:=2 to n do begin
m:=m+a[i]+a[1];
a[1]:=a[1]+a[i];
end;
write(m);
end.
4 条评论
-
21002 LV 8 @ 2013-10-05 17:44:48
var
heap:array[0..10000] of longint;
n,len,a,b,ans:longint;procedure swap(var a,b:longint);
var
c:longint;
begin
c:=a;
a:=b;
b:=c;
end;procedure put(x:longint);
var
son:longint;
begin
inc(len);
heap[len]:=x;
son:=len;
while (son<>1) and (heap[son]<heap[son div 2]) do
begin
swap(heap[son],heap[son div 2]);
son:=son div 2;
end;
end;function get:longint;
var
son,fa:longint;
begin
get:=heap[1];
heap[1]:=heap[len];
dec(len);
fa:=1;
while (fa*2<=len) or (fa*2+1<=len) do
begin
if (fa*2+1>len) or (heap[fa*2]<heap[fa*2+1]) then
son:=fa*2
else
son:=fa*2+1;
if heap[son]<heap[fa] then
begin
swap(heap[son],heap[fa]);
fa:=son;
end
else
break;
end;
end;procedure main;
var
i:longint;
tmp:longint;
begin
len:=0;
readln(n);
for i:=1 to n do
begin
read(tmp);
put(tmp);
end;
ans:=0;
for i:=1 to n-1 do
begin
a:=get; b:=get;
ans:=ans+a+b;
put(a+b);
end;
writeln(ans);
end;begin
main;
end. -
2009-07-31 11:25:27@
谢了
-
2009-07-24 21:03:07@
问题大大的
合并完了还要再排序
-
2009-07-24 20:58:08@
问题很大啊
- 1