Cod sursa(job #186352)
Utilizator | Data | 27 aprilie 2008 19:16:09 | |
---|---|---|---|
Problema | Rj | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 6.52 kb |
var a:array[1..100,1..100] of -1..300;
x,y:array[1..10000] of byte;
f:text; c:char; ok:boolean;
i,j,tmin,aux,xs,ys,xi,xf,yi,yf,xc,yc,u,p,n,m:integer;
procedure citire;
var i,j:byte;
begin
assign(f,'rj.in');reset(f);
readln(f,n,m);
for i:=1 to n do
begin
j:=1;
while not eoln(f) do
begin
read(f,c);
a[i,j]:=0;
if c='X' then a[i,j]:=-1;
if c='R' then begin
xf:=i;
yf:=j;
end;
if c='J' then begin
xi:=i;
yi:=j;
end;
inc(j);
end;
readln(f);
end;
x[1]:=xi;
y[1]:=yi;
a[xi,yi]:=1;
close(f);
end;
{procedure drum(xi,yi,xf,yf:byte);
begin
if (xi<>xf) and (yi<>yf) then
begin
if (xf-1>0) and (a[xf-1,yf]=a[xf,yf]-1) then
begin
if aux=tmin then begin
xs:=xf;
ys:=yf;
exit;
end;
inc(aux);
drum(xi,yi,xf-1,yf);
end
else if (xf+1<=n) and (a[xf+1,yf]=a[xf,yf]-1) then
begin
if aux=tmin then begin
xs:=xf;
ys:=yf;
exit;
end;
inc(aux);
drum(xi,yi,xf+1,yf);
end
else if (yf-1>0) and (a[xf,yf-1]=a[xf,yf]-1) then
begin
if aux=tmin then begin
xs:=xf;
ys:=yf;
exit;
end;
inc(aux);
drum(xi,yi,xf,yf-1);
end
else if (yf+1<=m) and (a[xf,yf+1]=a[xf,yf]-1) then
begin
if aux=tmin then begin
xs:=xf;
ys:=yf;
exit;
end;
inc(aux);
drum(xi,yi,xf,yf+1);
end
else if (xf-1>0) and (yf-1>0) and (a[xf-1,yf-1]=a[xf,yf]-1) then
begin
if aux=tmin then begin
xs:=xf;
ys:=yf;
exit;
end;
inc(aux);
drum(xi,yi,xf-1,yf-1);
end
else if (xf-1>0) and (yf+1<=m) and (a[xf-1,yf+1]=a[xf,yf]-1) then
begin
if aux=tmin then begin
xs:=xf;
ys:=yf;
exit;
end;
inc(aux);
drum(xi,yi,xf-1,yf+1);
end
else if (xf+1<=n) and (yf-1>0) and (a[xf+1,yf-1]=a[xf,yf]-1) then
begin
if aux=tmin then begin
xs:=xf;
ys:=yf;
exit;
end;
inc(aux);
drum(xi,yi,xf+1,yf-1);
end
else if (xf+1<=n) and (yf+1<=m) and (a[xf+1,yf+1]=a[xf,yf]-1) then
begin
if aux=tmin then begin
xs:=xf;
ys:=yf;
exit;
end;
inc(aux);
drum(xi,yi,xf+1,yf+1);
end;
end;
end;}
procedure lee;
begin
p:=1; u:=1;
while p<=u do
begin
xc:=x[p]; yc:=y[p];
if (xc-1>0) and (a[xc-1,yc]=0) then
begin
inc(u);
x[u]:=xc-1;
y[u]:=yc;
a[xc-1,yc]:=a[xc,yc]+1;
end;
if (xc+1<=n) and (a[xc+1,yc]=0) then
begin
inc(u);
x[u]:=xc+1;
y[u]:=yc;
a[xc+1,yc]:=a[xc,yc]+1;
end;
if (yc-1>0) and (a[xc,yc-1]=0) then
begin
inc(u);
x[u]:=xc;
y[u]:=yc-1;
a[xc,yc-1]:=a[xc,yc]+1;
end;
if (yc+1<=m) and (a[xc,yc+1]=0) then
begin
inc(u);
x[u]:=xc;
y[u]:=yc+1;
a[xc,yc+1]:=a[xc,yc]+1;
end;
if (xc-1>0) and (yc-1>0) and (a[xc-1,yc-1]=0) then
begin
inc(u);
x[u]:=xc-1;
y[u]:=yc-1;
a[xc-1,yc-1]:=a[xc,yc]+1;
end;
if (xc-1>0) and (yc+1<=m) and (a[xc-1,yc+1]=0) then
begin
inc(u);
x[u]:=xc-1;
y[u]:=yc+1;
a[xc-1,yc+1]:=a[xc,yc]+1;
end;
if (xc+1<=n) and (yc-1>0) and (a[xc+1,yc-1]=0) then
begin
inc(u);
x[u]:=xc+1;
y[u]:=yc-1;
a[xc+1,yc-1]:=a[xc,yc]+1;
end;
if (xc+1<=n) and (yc+1<=m) and (a[xc+1,yc+1]=0) then
begin
inc(u);
x[u]:=xc+1;
y[u]:=yc+1;
a[xc+1,yc+1]:=a[xc,yc]+1;
end;
inc(p);
end;
end;
procedure afisare;
begin
assign(f,'rj.out');rewrite(f);
writeln(f,tmin,' ',xs,' ',ys);
close(f);
end;
begin
citire;
lee;
if a[xf,yf] mod 2=0 then
begin
ok:=false;
tmin:=(a[xf,yf]-a[xi,yi]) div 2;
for i:=1 to n do
begin
for j:=1 to m do
if a[i,j]=tmin+1 then begin
xs:=i;
ys:=j;
ok:=true;
break;
end;
if ok then break;
end;
end
else
begin
ok:=false;
tmin:=(a[xf,yf]-a[xi,yi]) div 2+1;
for i:=1 to n do
begin
for j:=1 to m do
if a[i,j]=tmin then begin
xs:=i;
ys:=j;
ok:=true;
break;
end;
if ok then break;
end;
end;
{drum(xi,yi,xf,yf); }
afisare;
end.