测试结果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,求解释。