Cod sursa(job #1374329)

Utilizator 100attilaSzasz Attila 100attila Data 5 martie 2015 08:16:42
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 3.36 kb
const irany:array[1..2,1..8] of integer=((-1,-1,0,1,1, 1, 0,-1),
                                         ( 0, 1,1,1,0,-1,-1,-1));
var f,g:text;
    ter:array[1..50,1..50]of char;
    r:array[0..50,0..50,1..2]of integer;
    i,j,k,l,h,d,m,n,min,x,y:integer;
    mehet:boolean;
begin
assign(f,'rj.in');
assign(g,'rj.out');
reset(f);
rewrite(g);
readln(f,n,m);
for i:=1 to n do
                begin
                 for j:=1 to m do read(f,ter[i,j]);
                 readln(f);
                end;
for i:=1 to n do
for j:=1 to m do case ter[i,j]of ' ':begin
                                         r[i,j,1]:=1;
                                         r[i,j,2]:=1;
                                        end;
                                    'X':begin
                                         r[i,j,1]:=0;
                                         r[i,j,2]:=0;
                                        end;
                                    'R': r[i,j,1]:=2;
                                    'J': r[i,j,2]:=2;
                                 end;
k:=2;
repeat
mehet:=false;
for i:=1 to n do
 for j:=1 to m do
  if r[i,j,1]=k then
   for l:=1 to 8do
    if odd(l)then
     if (r[i+irany[1,l],j+irany[2,l],1]=1)or
      (r[i+irany[1,l],j+irany[2,l],1]>k+1)then
           begin
            r[i+irany[1,l],j+irany[2,l],1]:=k+1;
            mehet:=true;
           end
                                          else
      else
       begin
        if l=1 then h:=8
               else h:=l-1;
        if l=8 then d:=1
                else d:=l+1;
        if((r[i+irany[1,l],j+irany[2,l],1]=1)or
        (r[i+irany[1,l],j+irany[2,l],1]>k+1))and
        (((r[i+irany[1,h],j+irany[2,h],1]=1)or(r[i+irany[1,h],j+irany[2,h],1]>k+1))or
        ((r[i+irany[1,d],j+irany[2,d],1]=1)or(r[i+irany[1,d],j+irany[2,d],1]>k+1)))then
         begin
          r[i+irany[1,l],j+irany[2,l],1]:=k+1;
          mehet:=true;
         end;
       end;
k:=k+1;
until not(mehet);
k:=2;
repeat
mehet:=false;
for i:=1 to n do
 for j:=1 to m do
  if r[i,j,2]=k then
   for l:=1 to 8do
    if odd(l)then
     if (r[i+irany[1,l],j+irany[2,l],2]=1)or
      (r[i+irany[1,l],j+irany[2,l],2]>k+1)then
           begin
            r[i+irany[1,l],j+irany[2,l],2]:=k+1;
            mehet:=true;
           end
                                          else
      else
       begin
        if l=1 then h:=8
               else h:=l-1;
        if l=8 then d:=1
                else d:=l+1;
        if((r[i+irany[1,l],j+irany[2,l],2]=1)or
        (r[i+irany[1,l],j+irany[2,l],2]>k+1))and
        (((r[i+irany[1,h],j+irany[2,h],2]=1)or(r[i+irany[1,h],j+irany[2,h],2]>k+1))or
        ((r[i+irany[1,d],j+irany[2,d],2]=1)or(r[i+irany[1,d],j+irany[2,d],2]>k+1)))then
         begin
          r[i+irany[1,l],j+irany[2,l],2]:=k+1;
          mehet:=true;
         end;
       end;
k:=k+1;
until not(mehet);
min:=maxint;
for i:=1 to n do
for j:=1 to m do
if (r[i,j,1]=r[i,j,2])and(r[i,j,1]-1<min)and(r[i,j,1]<>0)then
                                           begin
                                            min:=r[i,j,1]-1;
                                            x:=i;
                                            y:=j;
                                           end;
writeln(g,x,' ',y,' ',min);
close(g);
end.