Cod sursa(job #197631)

Utilizator DeadEyeNaiba Mihai Lucian DeadEye Data 5 iulie 2008 12:34:42
Problema Gropi Scor 0
Compilator fpc Status done
Runda Junior Challenge 2008 Marime 1.58 kb
var f,g:text;
    a:array[0..1000,0..251] of 0..1;
    b:array[0..1000,0..251] of longint;
    n,c,nn,nr,i,j,max,m,x,y,xx,yy:longint;
procedure filling(x,y:longint);
begin
    inc(nr);
    if x-1>0
       then
          if (b[x-1,y]=0) and (a[x-1,y]=0) then b[x-1,y]:=nr;
    if (y-1>0) and (b[x,y-1]=0) and (a[x,y-1]=0)
       then b[x,y-1]:=nr;
    if (y+1<1001) and (b[x,y+1]=0) and (a[x,y+1]=0)
       then b[x,y+1]:=nr;
    if x+1>0
       then
          if (b[x+1,y]=0) and (a[x+1,y]=0) then b[x+1,y]:=nr;
    if b[xx,yy]<>0
       then exit
       else
          begin
             if b[x-1,y]=nr then filling(x-1,y);
             if b[xx,yy]<>0
                then exit;
             if b[x,y-1]=nr then filling(x,y-1);
             if b[xx,yy]<>0
                then exit;
             if b[x,y+1]=nr then filling(x,y+1);
             if b[xx,yy]<>0
                then exit;
             if b[x+1,y]=nr then filling(x+1,y);
             if b[xx,yy]<>0
                then exit;
          end;
    dec(nr);
end;
begin
    assign(f,'gropi.in'); reset(f);
    assign(g,'gropi.out'); rewrite(g);
    read(f,c,n);
    max:=0;
    for i:=1 to n do
       begin
          read(f,x,y);
          a[x,y]:=1;
          if x>max then max:=x;
       end;
    inc(max);
    readln(f,m);
    for nn:=1 to m do
       begin
          nr:=1;
          read(f,x,y,xx,yy);
          for i:=1 to max do
             for j:=1 to c do
                b[i,j]:=0;
          b[x,y]:=1; filling(x,y);
          writeln(g,b[xx,yy]);
       end;
    close(f); close(g);
end.