noip2005年第三题(过河)

来源:百度知道 编辑:UC知道 时间:2024/05/28 20:09:22
这道题用搜索怎么做啊?知道的帮忙给个程序(pascal)和解释,追加!

program river;
type stack=record
data:array[1..10000]of integer;t:integer;
end;
var np,tmp,ts,s,t,i,L:integer;
b:array[0..10000]of boolean;
path:stack;
ans:array[1..10000]of integer;
anst:integer;
procedure addin;
var i:integer;
begin
inc(anst);
for i:=1 to path.t do if b[path.data[i]] then inc(ans[anst]);
end;
procedure qsort(l,r:integer);
var tmp,i,j,mid:integer;
begin
i:=l;j:=r;mid:=ans[(i+j) div 2];
repeat
while ans[i]<mid do inc(i);
while mid<ans[j] do dec(j);
if i<=j then begin
tmp:=ans[i];ans[i]:=ans[j];ans[j]:=tmp;inc(i);dec(j);
end;
until i>j;
if l<j then qsort(l,j);if i<r then qsort(i,r);
end;
procedure jump;
var i:integer;
begin
for i:=s to t do begin
inc(np,i);inc(path.t);
path.data[path.t]:=np;
if np>=l then addin else jump;