Cod sursa(job #2273728)

Utilizator NOSCOPEPROKENDYMACHEAMACUMVREAU NOSCOPEPROKENDY Data 31 octombrie 2018 21:14:09
Problema Ograzi Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.05 kb
#include<fstream>

#include<vector>

#include<stdio.h>

#include<string.h>

#define MOD 1000003

using namespace std;

FILE *fi=fopen("ograzi.in","r");

ofstream fo("ograzi.out");

int n,m,h,w,nr,rez,i,x,y;

pair<int,int> C[50005];

vector<pair<int,int> > HT[MOD+5];

char S[100005];

int l,ind;



void nextS()

{

    ind=0;

    fread(S,1,100000,fi);

    l=strlen(S);

}



int nextInt()

{

    int r=0;

    if(ind==l)

        nextS();

    while(S[ind]<'0' || S[ind]>'9')

    {

        ind++;

        if(ind==l)

            nextS();

    }

    while(S[ind]>='0' && S[ind]<='9')

    {

        r=r*10+S[ind]-'0';

        ind++;

        if(ind==l)

            nextS();

    }

    return r;

}



int gethval(int x, int y)

{

    int rez;

    x/=w;

    y/=h;

    rez=(1LL*y*nr)%MOD;

    rez=(rez+x)%MOD;

    return rez;

}



int inters(int val, pair<int,int> c)

{

    vector<pair<int,int> >::iterator it;

    pair<int,int> a;

    int rez=0;

    for(it=HT[val].begin(); it!=HT[val].end(); it++)

    {

        a=*it;

        if(a.first>=c.first && a.first<=(c.first+w) && a.second>=c.second && a.second<=(c.second+h))

            rez++;

    }

    return rez;

}



int main()

{

    n=nextInt();

    m=nextInt();

    w=nextInt();

    h=nextInt();

    nr=(1000000/w)+1;

    for(i=1; i<=n; i++)

    {

        C[i].first=nextInt();

        C[i].second=nextInt();

    }

    for(i=1; i<=m; i++)

    {

        x=nextInt();

        y=nextInt();

        HT[gethval(x,y)].push_back({x,y});

    }

    for(i=1; i<=n; i++)

    {

        rez=rez+inters(gethval(C[i].first,C[i].second),C[i]);

        rez=rez+inters(gethval(C[i].first+w,C[i].second),C[i]);

        rez=rez+inters(gethval(C[i].first,C[i].second+h),C[i]);

        rez=rez+inters(gethval(C[i].first+w,C[i].second+h),C[i]);

    }

    fo<<rez<<"\n";

    fclose(fi);

    fo.close();

    return 0;

}