Cod sursa(job #2628824)

Utilizator CraniXortDumitrescul Eduard CraniXort Data 17 iunie 2020 17:22:09
Problema Ograzi Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <bits/stdc++.h>
#define maxn 100005
#define dmax 166013

std::ifstream fin ("ograzi.in");
std::ofstream fout ("ograzi.out");

int X[maxn], Y[maxn];
std::vector <int> v[dmax];

int sol = 0, lx, ly, x, y;

void check (int a, int b){
    int  p = (197*a+b)%dmax;
    if (v[p].empty() == false){
        for (auto i:v[p]){
            if (X[i] <= x and x <= X[i]+lx and Y[i] <= y and y <= Y[i]+ly)
                sol ++;
        }
    }
}

int main()
{
    int A, S, i, p, a, b;
    fin >> A >> S >> lx >> ly;
    for (i=0; i<A; i++){
        fin >> X[i] >> Y[i];
        a = (X[i] + lx - 1) / lx;
        b = (Y[i] + ly - 1) / ly;
        v[(197*a+b)%dmax].push_back (i);
    }

    for (i=0; i<S; i++){
        fin >> x >> y;
        a = (x + lx - 1) / lx;
        b = (y + ly - 1) / ly;
        check (a, b);
        check (a-1, b);
        check (a, b-1);
        check (a-1, b-1);
    }

    fout << sol << '\n';
    return 0;
}