Cod sursa(job #254348)

Utilizator nod_softwareBudisteanu Ionut Alexandru nod_software Data 7 februarie 2009 11:24:56
Problema Kdrum Scor 20
Compilator fpc Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 2 kb
program kdrum;

type rec = record
   x,y:byte;
   d:int64;
end;
var Fin,Fout:Text;
    v,d:array [1..50,1..50] of longint;
    xn,x1,x2,y1,y2,i,j,n,m,k:integer;
    x:array [1..2500] of rec;
    ok:boolean;
{*-------------------------------------------------------*}
{*-------------------------------------------------------*}
begin
    assign(fin,'kdrum.in'); Reset(fin);
    assign(fout,'kdrum.out'); Rewrite(fout);

    readln(fin,n,m,k);
    readln(fin,x1,y1,x2,y2);
    for i:=1 to n do
    begin
       for j:=1 to m do
       begin
          read(fin,v[i,j]);
          if v[i,j] = 0 then d[i,j]:=1;
       end;
       readln(fin);
    end;

    ok:=true;
    inc(xn); x[xn].x:=x1; x[xn].y:=y1; x[xn].d:=v[x1,y1];
    d[x1,y1]:=1;

    i:=0;
    while ok do
    begin
        inc(i);
        x1:=x[i].x;
        y1:=x[i].y;
        if (x1 = x2) and (y1=y2) and (x[i].d mod k = 0) then//am gasit
        begin
           writeln(fout,d[x1,y1]);
           Break;
        end;
        //In dreaptaa
        if (d[x1,y1+1] = 0)  and (y1<m) then
        begin
           inc(xn);
           x[xn].x:=x1;
           x[xn].y:=y1+1;
           d[x1,y1+1]:=d[x1,y1]+1;
           x[xn].d:=x[i].d*v[x1,y1+1];
        end;
        //In stanga/
        if (d[x1,y1-1] = 0) and (y1>1) then
        begin
           inc(xn);
           x[xn].x:=x1;
           x[xn].y:=y1-1;
           d[x1,y1-1]:=d[x1,y1]+1;
           x[xn].d:=x[i].d*v[x1,y1-1];
        end;
        //In jos
        If (d[x1+1,y1] = 0) and (x1<n)then
        begin
           inc(xn);
           x[xn].x:=x1+1;
           x[xn].y:=y1;
           d[x1+1,y1]:=d[x1,y1]+1;
           x[xn].d:=x[i].d*v[x1+1,y1];
        end;
        //In sus
        If (D[x1-1,y1] = 0) and (x1>1) then
        begin
           inc(xn);
           x[xn].x:=x1-1;
           x[xn].y:=y1;
           d[x1-1,y1]:=d[x1,y1]+1;
           x[xn].d:=x[i].d*v[x1-1,y1];
        end;
    end;

    Close(Fin);
    Close(fout);
end.