Cod sursa(job #917547)

Utilizator stef1995mmarcu stefan ovidiu stef1995m Data 18 martie 2013 08:54:43
Problema Ograzi Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int maxx=100005;
int difx[5]={0,0,-1,-1},dify[5]={0,-1,0,-1},x,y,a1,a2,key,i,n,m,w,h,l,j,nr;
vector < pair<int , int> > hash[maxx];
int line(int x,int y,int l)
{
    a1=x/w,a2=y/h;
    return ((a1+difx[l])*666+(a2+dify[l]))%maxx;
}
bool apar(pair<int , int > a,pair<int , int > b)
{
    if(b.first<=a.first+w&&b.first>=a.first&&b.second<=a.second+h&&b.second>=a.second)
        return true;
    return false;
}
void read()
{
    scanf("%d%d%d%d",&n,&m,&w,&h);
    for(i=1;i<=n;i++)
    {
        scanf("%d%d",&x,&y);
        key=line(x,y,0);
        hash[key].push_back(make_pair(x,y));
    }
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&x,&y);
        for(l=0;l<=3;l++)
        {
            key=line(x,y,l);
            for(j=0;j<hash[key].size();j++)
                if(apar(hash[key][j],make_pair(x,y)))
                {
                    nr++;
                    break;
                }
            if(j<hash[key].size())
                break;
        }
    }
}
int main()
{
    freopen("ograzi.in","r",stdin);
    freopen("ograzi.out","w",stdout);
    read();
    printf("%d\n",nr);
    return 0;
}