Pagini recente » Cod sursa (job #2748630) | Cod sursa (job #322284) | Cod sursa (job #2136519) | Cod sursa (job #92686) | Cod sursa (job #1463107)
#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#define MOD 666013
#define f first
#define s second
#define foreach(G) for (decltype((G).begin()) it = (G).begin(); it != (G).end(); ++it)
using namespace std;
const int Z = 1024;
int N, M, W, H, cnt;
vector <pair<int, int>> Hash[MOD];
char b[15];
inline int _hash(int x, int y) { return (x / W) * Z + y / H; }
void add(pair <int, int> p){
Hash[_hash(p.f, p.s) / MOD].push_back(p);
}
pair <int, int> read(){
gets(b);
int i = 0;
pair <int, int> p;
while (!(b[i] >= '0' && b[i] <= '9')) ++i;
for (; b[i] >= '0' && b[i] <= '9'; ++i)
p.f = p.f * 10 + (b[i] - '0');
for (++i; b[i] >= '0' && b[i] <= '9'; ++i)
p.s = p.s * 10 + (b[i] - '0');
return p;
}
inline bool check(pair <int, int> p){
for (int i = -1; i < 1; ++i)
for (int j = -1; j < 1; ++j)
foreach(Hash[_hash(p.f + i, p.s + j) / MOD]) if (it->f <= p.f && it->f + W >= p.f && it->s <= p.s && it->s + H >= p.s)
return 1;
return 0;
}
int main(){
freopen("ograzi.in", "r", stdin);
freopen("ograzi.out", "w", stdout);
scanf("%d %d %d %d\n", &N, &M, &W, &H);
for (; N; --N)
add(read());
for (; M; --M)
cnt += check(read());
printf("%d", cnt);
return 0;
}