Cod sursa(job #1463113)

Utilizator theprdvtheprdv theprdv Data 20 iulie 2015 03:35:59
Problema Ograzi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#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];
pair <int, int> p;
char b[25];

void read(){
	gets(b);
	int i = 0, x = 0, y = 0;
	while (!(b[i] >= '0' && b[i] <= '9')) ++i;

	for (; b[i] >= '0' && b[i] <= '9'; ++i)
		x = x * 10 + (b[i] - '0');

	for (++i; b[i] >= '0' && b[i] <= '9'; ++i)
		y = y * 10 + (b[i] - '0');

	p = make_pair(x, y);
}

inline int check(){
	for (int i = -1; i < 1; ++i)
		for (int j = -1; j < 1; ++j){
			int key = ((p.f / W + i) * Z + (p.s / H) + j);
			if (key < 0) continue;
			foreach(Hash[key % 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) 
		read(),
		Hash[((p.f / W) * Z + p.s / H) % MOD].push_back(p);
	
	for (; M; --M)
		read(),
		cnt += check();

	printf("%d", cnt);

	return 0;
}