Cod sursa(job #27256)

Utilizator fogabFodor Gabor fogab Data 6 martie 2007 11:58:50
Problema Ograzi Scor 40
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.88 kb
const max=137;
type  pe=^e;
      e=record
        me:word;
        next:pe;
       end;
var f:text;
    b:array[0..max,0..max] of pe;
    a:array[1..2,0..50000] of longint;
    n,m,w,h,i,sol,x,y,x2,y2:longint;
    go,go2:pe;
begin
sol:=0;
for x:=0 to max do
  for y:=0 to max do begin
                       new(b[x,y]);
                       b[x,y]^.next:=nil;
                       end;
assign(f,'ograzi.in');
reset(f);
readln(f,n,m,w,h);
for i:=1 to n do
  begin
  readln(f,a[1,i],a[2,i]);
  x:=(a[1,i] div w) mod max+1;
  y:=(a[2,i] div h) mod max+1;
  go:=b[x,y];
  while go^.next<>nil do go:=go^.next;
  new(go2);
  go2^.next:=nil;
  go2^.me:=i;
  go^.next:=go2;
  end;
a[1,0]:=-2147483646;
a[2,0]:=-2147483646;
for i:=1 to m do
  begin
    readln(f,x,y);
    x2:=(x div w) mod max+1;
    y2:=(y div h) mod max+1;
    go:=b[x2,y2]^.next;
    while go<>nil do begin
    if (a[1,go^.me]<=x) and (a[1,go^.me]+w>=x)
    and (a[2,go^.me]<=y) and (a[2,go^.me]+h>=y) then inc(sol);
    go:=go^.next;
    end;
    x2:=((x div w)-1) mod max+1;
    y2:=(y div h) mod max+1;
    go:=b[x2,y2]^.next;
    while go<>nil do begin
    if (a[1,go^.me]<=x) and (a[1,go^.me]+w>=x)
    and (a[2,go^.me]<=y) and (a[2,go^.me]+h>=y) then inc(sol);
    go:=go^.next;
    end;
    x2:=((x div w)-1) mod max+1;
    y2:=((y div h)-1) mod max+1;
    go:=b[x2,y2]^.next;
    while go<>nil do begin
    if (a[1,go^.me]<=x) and (a[1,go^.me]+w>=x)
    and (a[2,go^.me]<=y) and (a[2,go^.me]+h>=y) then inc(sol);
    go:=go^.next;
    end;
    x2:=(x div w) mod max+1;
    y2:=((y div h)-1) mod max+1;
    go:=b[x2,y2]^.next;
    while go<>nil do begin
    if (a[1,go^.me]<=x) and (a[1,go^.me]+w>=x)
    and (a[2,go^.me]<=y) and (a[2,go^.me]+h>=y) then inc(sol);
    go:=go^.next;
    end;
  end;
close(f);
assign(f,'ograzi.out');
rewrite(f);
writeln(f,sol);
close(f);
end.