讨论 / AC?!
lit 2011-10-09 02:02:00
点我顶贴 收藏 删除
测试结果1: 通过本测试点|有效耗时171ms

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

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

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

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

测试结果6: 通过本测试点|有效耗时609ms

测试结果7: 通过本测试点|有效耗时813ms

测试结果8: 通过本测试点|有效耗时766ms

测试结果9: 通过本测试点|有效耗时1015ms

测试结果10: 通过本测试点|有效耗时63ms

提交代码: view sourceprint?01.var

02.

a,b,c,d:array[1..100000,1..2]of longint;

03.

k,i,min,maxb,n,m,x,y,maxc,minn:longint;

04.function bj(a,b:longint):longint;begin if a>b then exit(a) else exit(b);end;

05.procedure qsort(l,r:longint);

06.var i,j,x,t:longint;

07.begin

08.

i:=l;j:=r;x:=a[(i+j)div 2,1];

09.

repeat

10.

while a[i,1]>x do inc(i);

11.

while a[j,1]<x do dec(j);

12.

if i<=j then

13.

begin

14.

t:=a[i,1];a[i,1]:=a[j,1];a[j,1]:=t;

15.

t:=a[i,2];a[i,2]:=a[j,2];a[j,2]:=t;

16.

inc(i);dec(j);

17.

end;

18.

until i>j;

19.

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

20.

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

21.end;

22.begin

23.

readln(n);minn:=maxlongint;

24.

for i:=1 to n do

25.

begin

26.

readln(a[i,1],b[i,1],c[i,1]);

27.

a[i,2]:=i;b[i,2]:=i;c[i,2]:=i;

28.

end;

29.

for k:=1 to 3 do

30.

begin

31.

qsort(1,n);min:=a[1,1];maxb:=0;maxc:=0;a[n+1,1]:=0;

32.

for i:=1 to n do

33.

begin

34.

x:=0;

35.

if bj(maxb,b[a[i,2],1])+a[i+1,1]+maxc<min then

36.

begin

37.

maxb:=bj(maxb,b[a[i,2],1]);

38.

min:=maxb+a[i+1,1]+maxc;x:=1;

39.

end;

40.

if bj(maxc,c[a[i,2],1])+a[i+1,1]+maxb<min then

41.

begin

42.

maxc:=bj(maxc,c[a[i,2],1]);

43.

min:=maxc+a[i+1,1]+maxb;x:=1;

44.

end;

45.

if x=0 then break;

46.

end;

47.

if min<minn then minn:=min;

48.

if k<>3 then begin d:=a;a:=b;b:=c;c:=d;end;

49.

end;

50.

writeln(minn);

51.end.

我第二次排序后,新的a数组指向的地址是错误的,我改正这个地方后60分,不改正AC,求解释。

查看更多回复
提交回复