Cod sursa(job #303234)

Utilizator SzabiVajda Szabolcs Szabi Data 9 aprilie 2009 17:48:15
Problema Castel Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.81 kb
program kastely;
type tipus=0..maxlongint;
tipus2=record
    i,j:1..150;
end;
var lst:array[0..22500,1..22500] of 0..22500;
f,g:text;
n,m,k,m1,m2,i,temp1,temp2,j,db:tipus;
b:array[1..22500] of tipus2;
a:array[1..150,1..150] of 0..22500;
c:array[1..22500] of boolean;
x,y:array[1..4] of -1..1;
function sor(k:word):word;
begin
if k mod m=0 then sor:=k div m else
sor:=(k div m)+1;

end;

function osz(k:word):word;
begin
if k mod m=0 then osz:=m else
osz:=k mod m;

end;
function szam(i,j:word):word;
begin
szam:=(i-1)*m+j;
end;

procedure tolt;
var i,temp:word;
begin
temp:=szam(b[m1].i,b[m1].j);
for i:=1 to lst[0,temp] do
if not (c[lst[i,temp]]) then begin
    c[lst[i,temp]]:=true;
    inc(m2);
    b[m2].i:=sor(lst[i,temp]);
    b[m2].j:=osz(lst[i,temp]);
end;

for i:=1 to 4 do begin
if (b[m1].i+x[i]>=1) and (b[m1].i+x[i]<=n) and (b[m1].j+y[i]>=1) and (b[m1].j+y[i]<=m) then begin
if not (c[szam(b[m1].i+x[i],b[m1].j+y[i])]) then begin

if c[a[b[m1].i+x[i],b[m1].j+y[i]]] then begin
  c[szam(b[m1].i+x[i],b[m1].j+y[i])]:=true;
  inc(m2);
  b[m2].i:=b[m1].i+x[i];
  b[m2].j:=b[m1].j+y[i];

end else begin

    inc(lst[0,a[b[m1].i+x[i],b[m1].j+y[i]]]);
    lst[lst[0,a[b[m1].i+x[i],b[m1].j+y[i]]],a[b[m1].i+x[i],b[m1].j+y[i]]]:=szam(b[m1].i+x[i],b[m1].j+y[i]);


end;


end;
end;
end;
end;


begin
assign(f,'castel.in');reset(f);
assign(g,'castel.out');rewrite(g);
x[1]:=-1;y[1]:=0;
x[2]:=0;y[2]:=1;
x[3]:=1;y[3]:=0;
x[4]:=0;y[4]:=-1;

readln(f,n,m,k);
temp1:=0;

for i:=1 to n do begin
    for j:=1 to m do
    read(f,a[i,j]);

    readln(f);

end;

m1:=1;m2:=1;
b[1].i:=sor(k);
b[1].j:=osz(k);
c[k]:=true;
while (m1<=m2) do begin
tolt;
inc(m1);
end;
db:=0;
for i:=1 to m*n do
if c[i] then inc(db);

writeln(g,db);

close(f);
close(g);

end.