p1811.pas
来自「高手写的所有acm例程 在acm.zju.edu.cn 上的题目的例程」· PAS 代码 · 共 118 行
PAS
118 行
PROGRAM p1811;
VAR
find :Boolean;
a,b,total,p,reach :Integer;
pass,stop,wait :array[0..100]of Boolean;
up,down :array[0..100]of Integer;
die :array[0..1005]of Integer;
pos :array[1.. 5]of Integer;
PROCEDURE LetGo(who:Integer);
var
nothing :Boolean;
begin
inc(reach);
if pos[who]+die[reach]=100 then
begin
find:=true;
writeln(who);
exit;
end;
if pos[who]+die[reach]<100 then
begin
pos[who]:=pos[who]+die[reach];
repeat
nothing:=true;
if up[pos[who]]<>0 then
begin
pos[who]:=up[pos[who]];
nothing:=false;
end;
if down[pos[who]]<>0 then
begin
pos[who]:=down[pos[who]];
nothing:=false;
end;
if pass[pos[who]] then
begin
inc(reach);
LetGo(who);
exit;
end;
if stop[pos[who]] then
begin
wait[who]:=true;
exit;
end;
until nothing;
end;
end;
Procedure print;
var
i :Integer;
begin
for I:=1 to p do write(pos[i],' '); write(' ');
end;
PROCEDURE Main;
var
i,who :Integer;
begin
up[0]:=0;down[0]:=0;pass[0]:=false;stop[0]:=false;
fillchar(wait,sizeof(wait),0);
for i:=1 to p do pos[i]:=0;
reach:=0;
who:=1;
find:=false;
repeat
if not wait[who] then
begin
LetGo(who);
if find then break;
end else wait[who]:=false;
inc(who);
if who=p+1 then who:=1;
until false;
end;
BEGIN
//assign(input,'p.in');
//reset(input);
read(a);
while a<>0 do
begin
inc(total);
die[total]:=a;
read(a);
end;
readln;
readln(p);
while p<>0 do
begin
total:=0;
readln(a,b);
fillchar(up,sizeof(up),0);
fillchar(down,sizeof(down),0);
fillchar(pass,sizeof(pass),0);
fillchar(stop,sizeof(stop),0);
while (a<>0)or(b<>0) do
begin
if a>b then down[a]:=b;
if a<b then up[a]:=b;
readln(a,b);
end;
readln(a);
while (a<>0) do
begin
if a<0 then stop[-a]:=true;
if a>0 then pass[a]:=true;
readln(a);
end;
Main;
readln(p);
end;
END.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?