-
工作原理:將陣列分成兩邊,使左邊的數字始終小於右邊的數字,然後分別對它們進行排序(如分而治之)。
procdure sort(l,r:longint);
vari,j,x,y:longint;
begini:=l;j:=r;x:=a[(i+j) shr 1];
shr 1 是 div 2,而 x 似乎只是乙個 }repeat 進行比較
while a[i]j) then beginy:=a[i];a[i]:=a[j];a[j]:=i;
將較小的數字交換到左側}
inc(i);dec(j);
end;until i>j;
repeat
if lif i 遞迴地繼續行}
end;這個應用程式帶有 Pascal,我根據自己的理解編寫了一些說明。 原來,當我學習快速划船時,我似乎並沒有在談論這個程式,而是因為我對這個太熟悉了而沒有記住那個。
-
我已經有幾年沒有碰過帕斯卡了,就連我這個老師都忘記了如何解決它。
-
國家集訓隊大公牛的快速順序是:
procedure quicksort(l,r:longint);
vari,j,x,yy:longint;
begini:=l;j:=r;x:=a[(i+j) shr 1];
repeat
while a[i]x do dec(j);
if i<=j then
beginyy:=a[i];a[i]:=a[j];a[j]:=yy;
inc(i);dec(j);
end;until i>j;
if iif lend;
您可以使用 CENA 進行測試,這絕對是最快的。 當涉及到隨機資料時,它可能沒有太大區別,但當涉及到一些非常糟糕的資料時,它很快就會。
-
參與排列的每個資料對應二叉樹的乙個節點,如果任何乙個節點有乙個左(右)子樹,則左(右)子樹的每個節點的資料必須小於(大)該節點的資料。 排序結果是通過遍歷排序二叉樹的中間順序獲得的。 操作步驟如下:
program pxtree;
consta:array[1..8] of integer=(10,18,3,8,12,2,7,3);
type point=^nod;
nod=record
w:integer;
right,left:point ;
end;var root,first:point;k:boolean;i:integer;
procedure hyt(d:integer;var p:point);
beginif p=nil then
beginnew(p);
with p^ do begin w:=d;right:=nil;left:=nil end;
if k then begin root:=p; k:=false end;
endelse with p^ do if d>=w then hyt(d,right) else hyt(d,left);
end;procedure hyt1(p:point);
beginwith p^ do
beginif left<>nil then hyt1(left);
write(w:4);
if right<>nil then hyt1(right);
endend;
beginfirst:=nil;k:=true;
for i:=1 to 8 do hyt(a[i],first);
hyt1(root);writeln;
end.
-
constdx:array[1..4] of integer=(1,-1,0,0);
dy:array[1..4] of integer=(0,0,1,-1);這個我就不用說了,這是4個方向。
vara,f:array[1..100,1..100] of longint;
r,c,i,j:integer;
ans:longint;
procedure work(x,y:integer);
vari:integer;
beginfor i:=1 to 4 do
if (x+dx[i]>0) and (x+dx[i]<=r) and (y+dy[i]>0) and (y+dy[i]<=c) then begin
如果 (a[x+dx[i],y+dy[i]]>a[x,y]) 和 (f[x+dx[i],y+dy[i]]=1) 那麼這個就更可怕了,主要是判斷它是否越界。
work(x+dx[i],y+dy[i]);
if (a[x+dx[i],y+dy[i]]>a[x,y]) and (f[x,y]ans then
ans:=f[i,j];
end;writeln(ans);
end.這個是我自己編的,然後先看註解,如果跑了就把註解刪掉,就是會劃掉的東西了。
對了,附在tyvj(也就是vijos的替代**,如果你有興趣可以上去做題,如果你已經知道了,那麼等我的時候,測試結果就上去了。
vijosnt mini
#01: accepted (0ms, 712kb)
#02: accepted (0ms, 712kb)
#03: accepted (0ms, 712kb)
#04: accepted (0ms, 712kb)
#05: accepted (0ms, 712kb)
#06: accepted (0ms, 712kb)
#07: accepted (0ms, 712kb)
#08: accepted (0ms, 712kb)
#09: accepted (43ms, 712kb)
#10: accepted (43ms, 712kb)
accepted / 100 / 87ms / 712kb
很高興回答。
-
思路:先把n個人的等級從小到大排序,然後找出兩個相鄰數字的差值,然後盯著答案後從小到大排序差值,最後輸出前k個差值的總和。
程式如下:蕭凱。
program chess;
var n,k,i,s:longint;a,b:packed array[1..100000] of longint;
procedure kp(l,r:longint);
var i,j,x,t:longint;
begini:=l;j:=r;x:=a[(l+r) div 2];
repeat
while a[i]x do dec(j);
if i<=j then begin t:=a[i];a[i]:=a[j];a[j]:=t;inc(i);dec(j);end;
until i>j;
if ix do dec(j);
if i<=j then begin t:=b[i];b[i]:=b[j];b[j]:=t;inc(i);dec(j);end;
until i>j;
if iend;begin
readln(n,k);for i:=1 to n do read(a[i]);kp(1,n);
for i:=1 to n-1 do b[i]:=a[i+1]-a[i];kp2(1,n-1);
for i:=1 to k do s:=s+b[i];writeln(s);
end.
Pascal編譯系統是乙個系統軟體。 Pascal 是第一種結構化程式設計語言,具有嚴格的語法、清晰的層次結構、易於編寫和可讀的程式。 Pascal語言廣泛應用於各種軟體中,程式分為名稱(程式後自提)、設定(var後定義)、開始(begin)、程式(body)、read(讀read ln)、結束(end),結構層次分明,嚴謹嚴密。 >>>More
我不敢做noi大師,但我參與過noip。
val(copy(s,pos('=',s)+1,pos(' ',s)-pos('=',s)-1),p,t); >>>More
人體呈酸性,易患各種疾病。 和所有慢性病患者和癌症患者一樣,體質是酸性的,經常吃肉的人的身體酸性也比較強,如果體內的酸性不及時排出體外,癌症的發病率長期比較高。 當人體血液中的酸度過高時,嘌呤的合成和分解會引起組織中的異物炎症,從而成為痛風的禍根。 >>>More
從小我就知道地球的資源是有限的,作為中學生,我們應該更加珍惜這些無價之寶,節能減排與我們每個人的生活息息相關,為什麼很多人去歐洲都說這裡像天堂一樣? 為什麼歐洲的生態這麼好? 因為歐洲人注重生態環境! >>>More