讨论 / 谁帮我看看??
xuu 2008-09-24 05:03:00
点我顶贴 收藏 删除
program hebin;

var a:array[0..10000]of longint;

i,j,n,tot,t:longint;

procedure sort(l,r:longint);

var i,j,x,y:longint;

begin

i:=l; j:=r;

x:=a[(i+j)div 2];

repeat

while a[i]<x do inc(i);

while a[j]>x do dec(j);

if i<=j then

begin

y:=a[i];

a[i]:=a[j];

a[j]:=y;

inc(i);

dec(j);

end;

until i>j;

if i<r then sort(i,r);

if j>l then sort(l,j);

end;

procedure suan(s:longint);

var y,k:longint;

begin

if s=n then exit;

a[s+1]:=a[s]+a[s+1];

tot:=tot+a[s+1];

k:=s+2;

while a[s+1]>a[k] do

begin

a[k-1]:=a[k];

inc(k);

end;

a[k-1]:=a[s+1];

suan(s+1);

end;

begin

readln(n);

for i:=1 to n do

read(a[i]);

sort(1,n);

suan(1);

writeln(tot);

end.

#1 heyong@2008-09-24 05:03:00
回复 删除
[color=red]

var

n,sum:longint;

a:array[1..10000] of longint;

procedure inte;

var i:longint;

begin

readln(n);

for i:=1 to n do read(a[i]);

end;

procedure sort( l,r:longint);

var i,j,mid,y:longint;

begin

i:=l; j:=r; mid:=a[ (l+r) div 2 ];

repeat

while (a[i]<mid) and (i<r) do inc(i);

while (a[j]>mid) and (l<j) do dec(j);

if i<=j then

begin

y:=a[i]; a[i]:=a[j]; a[j]:=y;

inc(i); dec(j);

end;

until i>j;

if i<r then sort(i,r);

if l<j then sort(l,j);

end;

procedure insertsort(s:longint);

var i,t,x:longint;

begin

t:=a[s];

for i:=s to n+1 do

if t<a[i] then break;

for x:=s to i-2 do a[x]:=a[x+1];

a[i-1]:=t;

end;

procedure main;

var j:longint;

begin

for j:=2 to n do

begin

a[j]:=a[j-1]+a[j];

inc(sum,a[j]);

insertsort(j);

end;

end;

begin

inte;

sort(1,n);

sum:=0;

main;

writeln(sum);

end.

[color]

查看更多回复
提交回复