Cod sursa(job #186366)

Utilizator DanielGGlodeanu Ioan Daniel DanielG Data 27 aprilie 2008 19:56:54
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 5.72 kb
var a:array[1..100,1..100] of -1..300;
x,y:array[1..10000] of byte;
f:text; c:char;
tmax,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
                              xi:=i;
                              yi:=j;
                              end;
        if c='J' then begin
                                   xf:=i;
                                   yf:=j;
                                   end;
                                   inc(j);
    end;
    readln(f);
    end;
x[1]:=xi;
y[1]:=yi;
a[xi,yi]:=1;
close(f);
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,tmax,' ',xs,' ',ys);
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 a[xf,yf]=tmax then
               begin
               xs:=xf;
               ys:=yf-1;
               exit;
               end;
               drum(xi,yi,xf-1,yf);
               end
   else if (xf+1<=n) and (a[xf+1,yf]=a[xf,yf]-1) then
                     begin
                     if a[xf,yf]=tmax then
                                begin
               xs:=xf;
               ys:=yf-1;
               exit;
               end;

                     drum(xi,yi,xf+1,yf);
                     end
   else if (yf-1>0) and (a[xf,yf-1]=a[xf,yf]-1) then
                    begin
                     if a[xf,yf]=tmax then
                      begin
               xs:=xf;
               ys:=yf+1;
               exit;
               end;
                    drum(xi,yi,xf,yf-1);
                    end
   else if (yf+1<=m) and (a[xf,yf+1]=a[xf,yf]-1) then
                     begin
                      if a[xf,yf]=tmax then
                       begin
               xs:=xf;
               ys:=yf+1;
               exit;
               end;
                     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 a[xf,yf]=tmax then
                       begin

               xs:=xf;
               ys:=yf+1;
               exit;
               end;
                     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 a[xf,yf]=tmax then
                       begin

               xs:=xf;
               ys:=yf+1;
               exit;
               end;
                     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 a[xf,yf]=tmax then
                       begin

               xs:=xf;
               ys:=yf+1;
               exit;
               end;
                     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 a[xf,yf]=tmax then
                        begin

               xs:=xf;
               ys:=yf+1;
               exit;
               end;
                     drum(xi,yi,xf+1,yf+1);
                     end;
   end;
end;
begin
citire;
lee;
if a[xf,yf] mod 2=0 then tmax:=a[xf,yf] div 2+1
else tmax:=(a[xf,yf]-a[xi,yi]) div 2+1;
drum(xi,yi,xf,yf);
afisare;
end.