Cod sursa(job #918112)

Utilizator stef1995mmarcu stefan ovidiu stef1995m Data 18 martie 2013 17:20:53
Problema Ograzi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 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+5];
int line(int x,int y,int l)
{
    a1=(x+w-1)/w;
    a2=(y+h-1)/h;
    if(a1-difx[l]>=0&&a2+dify[l]>=0)
        return ((a1+difx[l])*100+(a2+dify[l]))%maxx;
    return 100006;
}
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++;
                    l=5;
                    break;
                }
        }
    }
}
int main()
{
    freopen("ograzi.in","r",stdin);
    freopen("ograzi.out","w",stdout);
    read();
    printf("%d\n",nr);
    return 0;
}