讨论 / 帮帮忙啊,看看怎么错了
李梦雨 2011-10-29 17:05:00
点我顶贴 收藏 删除
type

tree=record

f,left,right,data:longint;

end;

var i,j,p,z,n,t,k:longint;

sum,m:int64;

a:array [1..100000]of tree;

function min(h:longint):longint;

begin

m:=100000000000;

for i:=1 to h do

if (a[i].data<m)and (a[i].f=0) then

begin

m:=a[i].data;

t:=i;

end;

min:=t;

end;

procedure guozi;

begin

for k:=n+1 to z do

begin

p:=min(k-1);a[p].f:=k;a[k].left:=p;

j:=min(k-1);a[j].f:=k;a[k].right:=j;

a[k].data:=a[p].data+a[j].data;

end;

end;

begin

readln(n);

z:=n*2-1;

for i:=1 to n do

read(a[i].data);

guozi;

sum:=0;

for i:=n+1 to z do sum:=sum+a[i].data;

writeln(sum);

end.

测试结果1: 通过本测试点|有效耗时172ms

测试结果2: 通过本测试点|有效耗时172ms

测试结果3: 通过本测试点|有效耗时172ms

测试结果4: 通过本测试点|有效耗时469ms

测试结果5: 通过本测试点|有效耗时593ms

测试结果6: 选手程序运行超过时限

测试结果7: 测试结果错误.错误结果为:1233019094

正确结果应为:199205993

测试结果8: 测试结果错误.错误结果为:1233019094

正确结果应为:130108340

测试结果9: 测试结果错误.错误结果为:1233019094

正确结果应为:233393206

测试结果10: 选手程序运行超过时限

#1 C_for_l_forget@2011-09-22 06:10:00
回复 删除
没错...

但效率太低了

没通过的那些点都是超时的原因

算法是对的

#2 李梦雨@2011-09-27 00:55:00
回复 删除
回复 沙发C_for_l_forget 的帖子

那有些题解上说 用哈夫曼树是怎么做呢?

#3 C_for_l_forget@2011-09-27 05:46:00
回复 删除
回复 板凳李梦雨 的帖子

我快排+插排做的

树 不是很清楚

#4 郑执@2011-10-29 17:05:00
回复 删除
program CS200703;

var i,j,k,l,n,t:integer;

s:array[1..50] of longint;

sum:longint;

begin

sum:=0;

readln(n);

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

for i:=1 to n do

for j:=i+1 to n do

if s[i]>s[j] then begin

t:=s[i];s[i]:=s[j];s[j]:=t;

end;

for i:=1 to n-1 do begin

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

sum:=sum+s[i+1];

for j:=i+1 to n do begin

if s[i+1]>s[j] then begin

t:=s[i+1];

for l:=i+1 to j-1 do s[l]:=s[l+1];

s[j-1]:=t;

end;

end;

end;

writeln(sum);

end.

查看更多回复
提交回复