Cod sursa(job #171749)

Utilizator TudorutzuMusoiu Tudor Tudorutzu Data 4 aprilie 2008 23:22:05
Problema Castel Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.66 kb
const dx:array[1..4]of integer=(0,1,-1,0);
      dy:array[1..4] of integer=(1,0,0,-1);
var f,g:text;
    ch:array[0..22500] of integer;
    c,d:array[1..91000] of integer;
    ok:boolean;
    a,ma:array[0..151,0..151] of integer;
    n,xt,x,m,i,yt,j,y,u,p,nr,ki,k,kj:longint;
begin
     assign(f,'castel.in'); reset(f);
     assign(g,'castel.out'); rewrite(g);
     readln(f,n,m,k);
     for i:=1 to n do
     begin
          for j:=1 to m do read(f,a[i,j]);
          readln(f);
     end;
     for i:=0 to n+1 do
     begin
          ma[i,0]:=-5;
          ma[i,m+1]:=-5;
     end;
     for j:=0 to m+1 do
     begin
          ma[0,j]:=-5;
          ma[0,n+1]:=-5;
     end;
     if k<>m then ki:=k div m+1
             else ki:=k div m;
     if k mod m=0 then kj:=m
                  else kj:=k mod m;
     u:=1;
     nr:=0;
     p:=0;
     c[1]:=ki;
     d[1]:=kj;
     a[ki,kj]:=k;
     ch[k]:=1;
     while (p<u) do
     begin
          inc(p);
          x:=c[p];
          y:=d[p];
          if ma[x,y]>-1 then inc(nr);
          dec(ma[x,y]);
          ok:=true;
          for i:=1 to 4 do
          begin
               xt:=x+dx[i];
               yt:=y+dy[i];
               if (ma[xt,yt]>-4)and(ch[a[xt,yt]]=1) then
               begin
                    ok:=false;
                    inc(u);
                    c[u]:=xt;
                    d[u]:=yt;
                    ch[(xt-1)*m+yt]:=1;
               end;
          end;
          if (ok)and(ma[x,y]>-4) then
          begin
               inc(u);
               c[u]:=x;
               d[u]:=y;
          end;
     end;
     writeln(g,nr);
     close(g);
end.