Cod sursa(job #253855)

Utilizator CezarMocanCezar Mocan CezarMocan Data 6 februarie 2009 12:59:58
Problema Grendizer Scor 30
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 1 Marime 1.12 kb
#include <cstdio>

using namespace std;

struct punct {
	int x, y;
};

int n, m, t[610][610], i, j, a, b, r, c, p1, p2, sol;

int main() {
	freopen("grendizer.in", "r", stdin);
	freopen("grendizer.out", "w", stdout);
	
	scanf("%d%d", &n, &m);
	
	for (i = 1; i <= n; i++) {
		scanf("%d%d", &a, &b);
		a += 300;
		b += 300;
		t[a][b]++;
	}
	
	for (i = 1; i <= m; i++) {
		scanf("%d%d%d", &a, &b, &r);
		sol = 0;
		a += 300; b += 300;
		if (r <= 300) {
			p1 = r; p2 = 0;
			while (p1 >= 0) {
				if (a + p1 >= 0 && a + p1 <= 600 && b + p2 >= 0 && b + p2 <= 600)
					sol += t[a + p1][b + p2];	
				if (a + p1 >= 0 && a + p1 <= 600 && b - p2 >= 0 && b - p2 <= 600)			
					if (p2 != 0 && p1 != 0)
						sol += t[a + p1][b - p2];	
				if (a - p1 >= 0 && a - p1 <= 600 && b + p2 >= 0 && b + p2 <= 600)							
					if (p1 != 0 && p2 != 0)
						sol += t[a - p1][b + p2];	
				if (a - p1 >= 0 && a - p1 <= 600 && b - p2 >= 0 && b - p2 <= 600)							
					sol += t[a - p1][b - p2];	
				p1--;
				p2++;
			}
		}
		
		if (r == 0)
		   sol = t[a][b];
		
		printf("%d\n", sol);
		
	}
	
		
	
	return 0;
}