Pagini recente » Cod sursa (job #1679016) | Cod sursa (job #2866691) | Cod sursa (job #2982784) | Cod sursa (job #2191832) | Cod sursa (job #27216)
Cod sursa(job #27216)
#include <stdio.h>
#include <vector>
using namespace std;
#define LL long long
#define ff first
#define ss second
#define NR 1432131513
#define NRB 47
int N, M, W, H;
int nr1[1 << 18];
pair <int, int> hash1[1 << 18][5];
int nr2[1 << 18];
pair <int, int> hash2[1 << 18][5];
int srch(int x, int y, int md)
{
int i;
for (i = 0; i < nr1[md]; i++)
if (x - W <= hash1[md][i].ff && hash1[md][i].ff <= x && y - H <= hash1[md][i].ss && hash1[md][i].ss <= y) return 1;
for (i = 0; i < nr2[md]; i++)
if (x - W <= hash2[md][i].ff && hash2[md][i].ff <= x && y - H <= hash2[md][i].ss && hash2[md][i].ss <= y) return 1;
return 0;
}
int main()
{
int i, x, y;
int md;
freopen("ograzi.in", "r", stdin);
freopen("ograzi.out", "w", stdout);
scanf("%d %d %d %d", &N, &M, &W, &H);
for (i = 1; i <= N; i++) {
scanf("%d %d", &x, &y);
md = ((LL) (x / W) * (y / H) * NR) >> NRB;
if (nr1[md] == 5 && nr2[md] == 5) {
printf("0\n");
return 0;
}
if (nr1[md] <= nr2[md]) hash1[md][nr1[md]++] = make_pair(x, y);
else hash2[md][nr2[md]++] = make_pair(x, y);
}
int ww, hh, rez = 0;
for (i = 1; i <= M; i++) {
scanf("%d %d", &x, &y);
ww = x / W; hh = y / H;
md = ((LL) ww * hh * NR) >> NRB;
if (srch(x, y, md)) { rez++; continue; }
md = ((LL) (ww-1) * hh * NR) >> NRB;
if (srch(x, y, md)) { rez++; continue; }
md = ((LL) ww * (hh-1) * NR) >> NRB;
if (srch(x, y, md)) { rez++; continue; }
md = ((LL) (ww-1) * (hh-1) * NR) >> NRB;
if (srch(x, y, md)) { rez++; continue; }
}
printf("%d\n", rez);
fclose(stdin);
fclose(stdout);
return 0;
}