运输pascal 90分程序
这题有点像合并果子,只不过是合并最大的两个,并div k,再放进数组里排序。
错了一个点,求大神看看。
-
var a:array[0..10000]of int64; i,j,n,m:longint; procedure kp(l,r:longint); var i,j,mid:longint; begin if l>=r then exit; i:=l;j:=r;mid:=a[(l+r) div 2]; repeat while a[i]<mid do inc(i); while a[j]>mid do dec(j); if i<=j then begin a[0]:=a[i];a[i]:=a[j];a[j]:=a[0]; inc(i);dec(j); end; until i>j; kp(l,j); kp(i,r); end; begin readln(n,m); for i:=1 to n do read(a[i]); kp(1,n);//从小到大排序 for i:=n-1 downto 1 do//最后面合并 begin a[i]:=(a[i]+a[i+1]) div m;//记住要div m for j:=i-1 downto 1 do//合并了还要放进数组排序,插入排序 if a[i]<a[j] then begin a[0]:=a[i];a[i]:=a[j];a[j]:=a[0]; end; end; write(a[1]);//最后合并成一个 end.