Cod sursa(job #197572)

Utilizator theratmantheratman theratman Data 5 iulie 2008 10:36:14
Problema Gropi Scor 0
Compilator fpc Status done
Runda Junior Challenge 2008 Marime 1.26 kb
var f,g:text;
    ok:boolean;
    a,b:array[1..10000000]of integer;
    v:array[0..3,0..1000000000]of integer;
    h,l,c,n,m,i,nr,x,y,x1,x2,y1,y2: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 h:=1 to m do begin
 read(f,x1,y1,x2,y2);
 ok:=false;
 a[1]:=x1;
 b[1]:=y1;
 nr:=1;
 while not ok do begin
  x:=a[nr];
  y:=b[nr];
  if (v[x+1,y]=0)and(x<>l) then begin
   v[x+1,y]:=v[x,y]+1;
   a[i]:=x+1;
   b[i]:=y;
   inc(i);
  end;
  if (a[i-1]=x2)and(b[i-1]=y2) then begin
   ok:=true;
   break;
  end;
  if (v[x-1,y]=0)and(x<>1) then begin
   v[x-1,y]:=v[x,y]+1;
   a[i]:=x-1;
   b[i]:=y;
   inc(i);
  end;
  if (a[i-1]=x2)and(b[i-1]=y2) then begin
   ok:=true;
   break;
  end;
  if (v[x,y+1]=0)and(y<>l) then begin
   v[x,y+1]:=v[x,y]+1;
   a[i]:=x;
   b[i]:=y+1;
   inc(i);
  end;
  if (a[i-1]=x2)and(b[i-1]=y2) then begin
   ok:=true;
   break;
  end;
  if (v[x,y-1]=0)and(y<>1) then begin
   v[x,y-1]:=v[x,y]+1;
   a[i]:=x;
   b[i]:=y-1;
   inc(i);
  end;
  if (a[i-1]=x2)and(b[i-1]=y2) then begin
   ok:=true;
   break;
  end;
  inc(nr);
 end;
 writeln(g,v[x2,y2]);
end;
close(f);
close(g);
end.