Cod sursa(job #323485)

Utilizator nod_softwareBudisteanu Ionut Alexandru nod_software Data 12 iunie 2009 11:43:44
Problema Rj Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.81 kb
program rj;
{$APPTYPE CONSOLE}
uses
  SysUtils;
const a : array [1..4] of integer= (-1,0,1,0);
const b : array [1..4] of integer = (0,1,0,-1);//nord, est, sud  vest
type rec = record
    x,y:byte;
    c:Word;
end;
var fin,fout:text;
    i,j,n,m,st,newx,newy,xn,yn,min,minx,miny:longint;
    c:char;
    ro,ju:array [1..100,1..100] of integer;
    x,y:array [1..10000] of rec;
{*-----------------------------------------------*}
{*-----------------------------------------------*}
begin
    assign(fin,'rj.in'); reset(fin); assign(fout,'rj.out'); rewrite(fout);
    readln(fin,n,m);
    for i:=1 to n do
    begin
       for j:=1 to m do
       begin
          read(fin,c);
          case c of
             'X':begin ro[i,j]:=-1; ju[i,j]:=-1; end;
             'R':begin
                    inc(xn);
                    x[xn].x:=i;
                    x[xn].y:=j;
                    x[xn].c:=0;
                 end;
//             ' ':v[i,j].c:=0;
             'J':begin
                    inc(yn);
                    y[yn].x:=i;
                    y[yn].y:=j;
                    y[yn].c:=0;
                 end;
          end;
       end;
       readln(fin);
    end;

    i:=0;
    while i <xn do
    begin
       inc(i);
       for j:=1 to 4 do
       begin
          newx:=x[i].x+a[j];
          newy:=x[i].y+b[j];

          if (newx > 0) and (newy>0) and (newx<=n) and (newy<=m) then
          if ro[newx,newy] = 0 then
          begin
              ro[newx,newy]:=x[i].c+1;
              inc(xn);
              x[xn].x:=newx;
              x[xn].y:=newy;
              x[xn].c:=x[i].c+1;
          end;
       end;
    end;

    i:=0;
    while i <=yn do
    begin
        inc(i);
        for j:=1 to 4 do
        begin
            newx:=y[i].x+a[j];
            newy:=y[i].y+b[j];

            if (newx>0)and (newy>0) and (newx<=n) and (newy<=m) then
               if ju[newx,newy] = 0 then
               begin
                  ju[newx,newy]:=y[i].c+1;
                  inc(yn);
                  y[yn].x:=newx;
                  y[yn].y:=newy;
                  y[yn].c:=y[i].c+1;
               end;
        end;
    end;

  {  for i:=1 to n do
    begin
       for j:=1 to m do write(fout,ro[i,j],' ');
       writeln(fout);
    end;
    writeln(fout);

    for i:=1 to n do
    begin
       for j:=1 to m do write(fout,ju[i,j],' ');
       writeln(fout);
    end;  }

    min:=maxint;
    for i:=1 to n do
    begin
        for j:=1 to m do
           if (ro[i,j] = ju[i,j]) and (ro[i,j]>0) then
              if min > ro[i,j] then
              begin
                 min:=ro[i,j];
                 minx:=i;
                 miny:=j;
              end;
    end;
    writeln(fout,min,' ',minx,' ',miny);
    close(fin); Close(fout);
end.