Cod sursa(job #28963)

Utilizator vanila0406Ionescu Victor vanila0406 Data 8 martie 2007 14:49:34
Problema Ograzi Scor 20
Compilator fpc Status done
Runda Arhiva de probleme Marime 3.24 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)or(v[i].x=v[j].x)and(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; {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.