Cod sursa(job #197583)

Utilizator theratmantheratman theratman Data 5 iulie 2008 11:17:15
Problema Gropi Scor 0
Compilator fpc Status done
Runda Junior Challenge 2008 Marime 1.18 kb
var f,g:text;
    v:array[1..2,1..400000000] of integer;
    a,b:array[1..1000000] of integer;
    ok:boolean;
    x,y,x1,x2,y1,y2,n,m,l,c,i,j,k,nr:longint;
begin
assign(f,'gropi.in');reset(f);
assign(g,'gropi.out');rewrite(g);
read(f,c,n);
l:=2;
for i:=1 to n do begin
 read(f,x,y);
 v[x,y]:=-1;
end;
read(f,m);
for k:=1 to m do begin
 read(f,x1,y1,x2,y2);
 a[1]:=x1;
 b[1]:=y1;
 ok:=false;
 nr:=1;
 i:=2;
 while not ok do begin
  x:=a[nr];
  y:=b[nr];
  if (x-1>0)and(v[x-1,y]=0) then begin
   v[x-1,y]:=v[x,y]+1;
   a[i]:=x-1;
   b[i]:=y;
   inc(i);
  end;
  if (x-1=x2)and(y=y2) then break;
  if (x+1<l+1)and(v[x+1,y]=0)then begin
   v[x+1,y]:=v[x,y]+1;
   a[i]:=x+1;
   b[i]:=y;
   inc(i);
  end;
  if (x+1=x2)and(y=y2) then break;
  if (y-1>0)and(v[x,y-1]=0) then begin
   v[x,y-1]:=v[x,y]+1;
   a[i]:=x;
   b[i]:=y-1;
   inc(i);
  end;
  if (x=x2)and(y-1=y2) then break;
  if (y+1<c+1)and(v[x,y+1]=0) then begin
   v[x,y+1]:=v[x,y]+1;
   a[i]:=x;
   b[i]:=y+1;
   inc(i);
  end;
  if (x=x2)and(y+1=y2) then break;
  inc(nr);
 end;
 writeln(g,v[x2,y2]+1);
 for i:=1 to l do
  for j:=1 to c do
   v[i,j]:=0;
end;
close(f);
close(g);
end.