Pagini recente » Cod sursa (job #311178) | Cod sursa (job #365834) | Cod sursa (job #315639) | Cod sursa (job #2406373) | Cod sursa (job #1663256)
#include <fstream>
#include <vector>
#include <cassert>
using namespace std;
const long long MOD = 19997;
vector <pair <int, int> > M[MOD * 2];
int n, m, w, h, sol;
const int dx[] = {0, 0, -1, -1};
const int dy[] = {0, -1, 0, -1};
int f(int x, int y) {
return (1000003LL * x + y) % MOD;
}
void add(int x, int y, int key) {
assert (key > -1 && key < MOD * 2);
for (vector <pair <int, int> > :: iterator it = M[key].begin(); it != M[key].end(); ++it)
if (it -> first == x && it -> second == y)
return;
M[key].push_back(make_pair(x, y));
}
bool query(int x, int y, int key) {
assert (key > -1 && key < MOD * 2);
for (vector <pair <int, int> > :: iterator it = M[key].begin(); it != M[key].end(); ++it)
if (x >= it -> first && x <= it -> first + w && y >= it -> second && y <= it -> second + h)
return true;
return false;
}
int main() {
ifstream fin ("ograzi.in");
ofstream fout ("ograzi.out");
fin >> n >> m >> w >> h;
for (int x, y, i = 0; i < n; ++i) {
fin >> x >> y;
add(x, y, f(x / w, y / h));
}
for (int x, y, i = 0; i < m; ++i) {
fin >> x >> y;
for (int k = 0; k < 4; ++k) {
if (query(x, y, f(x / w + dx[k], y / h + dy[k]))) {
sol++;
break;
}
}
}
fout << sol;
fin.close();
fout.close();
return 0;
}