Cod sursa(job #28960)
Utilizator | Data | 8 martie 2007 14:46:40 | |
---|---|---|---|
Problema | Ograzi | Scor | 20 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 3.2 kb |
program ograzi;
type ogr=record
x,y:longint;
end;
var f,g:text;
m,n,w,h:longint;
v:array[1..5000000] of ogr;
function cbin(x,y,p,u:longint):byte;
var m:longint;
begin
if p>u then
cbin:=0 else
begin
m:=(p+u)div 2;
{if (x>=v[m].x)and(x<=v[m].x+w)and
(y>=v[m].y)and(y<=v[m].y+h) then
cbin:=1 else
if (x<v[m].x)or((y<v[m].y)and(x=v[m].x)) then
cbin:=cbin(x,y,p,m-1) else
cbin:=cbin(x,y,m+1,u);}
if (x>=v[m].x)and(x<=v[m].x+w) then
if (y>=v[m].y)and(y<=v[m].y+h) then
cbin:=1 else
if (y<v[m].y) then cbin:=cbin(x,y,p,m-1) else
cbin:=cbin(x,y,m+1,u) else
if x<v[m].x then cbin:=cbin(x,y,p,m-1) else
cbin:=cbin(x,y,m+1,u);
end;
end;
procedure pozitie(var m:longint;p,u:longint);
var i,j,di,dj,aux:longint;
aux1:ogr;
begin
i:=p;
j:=u;
di:=0;
dj:=-1;
while i<j do
begin
if v[i].x>v[j].x then
begin
aux:=di;
di:=-dj;
dj:=-aux;
aux1:=v[i];
v[i]:=v[j];
v[j]:=aux1;
end else
if v[i].x=v[j].x then
if v[i].y>v[j].y then
begin
aux:=di;
di:=-dj;
dj:=-aux;
aux1:=v[i];
v[i]:=v[j];
v[j]:=aux1;
end;
i:=i+di;
j:=j+dj;
end;
m:=i;
end;
procedure quick(p,u:longint);
var m:longint;
begin
if p<u then
begin
pozitie(m,p,u);
quick(p,m-1);
quick(m+1,u);
end;
end;
procedure iofile;
var i,noi,x,y:longint;
begin
assign(f,'ograzi.in');
reset(f);
assign(g,'ograzi.out');
rewrite(g);
readln(f,n,m,w,h);
for i:=1 to n do
readln(f,v[i].x,v[i].y);
quick(1,n);
noi:=0;
for i:=1 to m do
begin
readln(f,x,y);
if cbin(x,y,1,n)=1 then
inc(noi);
end;
writeln(g,noi);
close(g);
end;
begin
iofile;
end.