Cod sursa(job #1122159)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 25 februarie 2014 16:43:33
Problema Ograzi Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream f("ograzi.in");
ofstream g("ograzi.out");

#define cout g
#define x first
#define y second
#define mp make_pair
#define pb push_back
#define pii pair<int,int>

vector<pii> H[1<<17];
bool okz;
int n,m,w,h,i,result;
pii T;

void _up(int _key,pii P)
{
    _key&=((1<<16)-1);
    H[_key].pb(P);
}

void ck(int c1,int c2,pii P)
{
    int _key=(c1^c2)&((1<<16)-1);
    int N=H[_key].size();

    for(int i=0; i<N; ++i)
        if (H[_key][i].x<=P.x&&H[_key][i].x+w>=P.x)
            if (H[_key][i].y<=P.y&&H[_key][i].y+h>=P.y)
                okz=true;
}

int main()
{
    f>>n>>m>>w>>h;

    for(i=1; i<=n; ++i)
    {
        f>>T.x>>T.y;
        _up(((T.x/w+1)^(T.y/h+1)),T);
    }

    for(i=1; i<=m; ++i)
    {
        f>>T.x>>T.y;
        int c1=T.x/w+1,c2=T.y/h+1;
        okz=false;
        ck(c1,c2,T);
        --c1;
        ck(c1,c2,T);
        --c2;
        ck(c1,c2,T);
        ++c1;
        ck(c1,c2,T);
        if (okz) ++result;
    }

    cout<<result<<'\n';

    return 0;
}