Pagini recente » Cod sursa (job #345750) | Cod sursa (job #3146782) | Cod sursa (job #2747199) | Cod sursa (job #2692572) | Cod sursa (job #878988)
Cod sursa(job #878988)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("ograzi.in");
ofstream fout("ograzi.out");
#define MOD 1293431
int N, M, W, H;
vector< pair<int, int> > HASH[MOD];
int get_key(int x, int y) {
if (x < 0 || y < 0)
return -1;
return (1LL * x * 980123 + y) % MOD;
}
/*void parse(int &a) {
static int poz = 0;
int nr = 0;
while (c[poz] != ' ' && c[poz] != '\n' && c[poz] != '\0') {
nr = (nr * 10) + c[poz] - '0';
++poz;
}
a = nr;
++poz;
}
*/
int main () {
freopen ("ograzi.in", "r", stdin);
setvbuf(stdin, NULL, _IOFBF, 100000);
cin >> N >> M >> W >> H; //fin.get();
//fin.getline(c, MOD, EOF);
for (int i = 1; i <= N; ++i) {
int x, y;
cin >> x >> y;
//parse(x); parse(y);
HASH[get_key(x / W, y / H)].push_back(make_pair(x, y));
}
int rez = 0;
for (int i = 1; i <= M; ++i) {
int x, y;
cin >> x >> y;
//parse(x); parse(y);
int ok = 0;
for (int dx = -1; dx <= 0 && !ok; ++dx)
for (int dy = -1; dy <= 0 && !ok; ++dy) {
int key = get_key(x / W + dx, y / H + dy);
if (key != -1)
for (int j = 0; j < HASH[key].size() && !ok; ++j) {
int cx = HASH[key][j].first;
int cy = HASH[key][j].second;
if (x >= cx && x <= cx + W)
if (y >= cy && y <= cy + H) {
++rez;
ok = 1;
}
}
}
}
fout << rez;
return 0;
}