Cod sursa(job #44837)

Utilizator alextheroTandrau Alexandru alexthero Data 31 martie 2007 19:11:14
Problema Regiuni Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>

#define nmax 1005
#define mmax 1005
#define hash 666013
#define dd double

int x1[mmax],y1[mmax],grup[mmax],n,m;
int a[nmax],c[nmax],b[nmax];

dd cp(dd x1,dd y1,dd x2,dd y2,dd x3,dd y3) {
	return (dd)((dd)x2 - (dd)x1) * ((dd)y3 - (dd)y2) - ((dd)x3 - (dd)x2) * ((dd)y2 - (dd)y1);
}

int main() {
	freopen("regiuni.in","r",stdin);
	freopen("regiuni.out","w",stdout);

	scanf("%d%d",&n,&m);
	for(int i = 1; i <= n; i++) scanf("%d %d %d",&a[i],&b[i],&c[i]);

	for(int i = 1; i <= m; i++) {
		scanf("%d%d",&x1[i],&y1[i]);
		grup[i] = 1;
	}

	for(int i = 1; i <= n; i++) 
		for(int j = 1; j <= m; j++) {
			dd o = cp(1,(dd)(- (dd)c[i] - (dd)a[i]) / (dd)(b[i] == 0 ? 0.000001 : b[i]),2,(dd)(- (dd)c[i] - (dd)2 * (dd)a[i]) / (dd)(b[i] == 0 ? 0.001 : b[i]),x1[j],y1[j]);
			grup[j] += grup[j];
			if(o > 0) grup[j]++;
			if(grup[j] >= hash) grup[j] -= hash;
		}
	
	int r = 0;
	for(int i = 1; i <= m; i++) {
		int ok = 1;
		for(int j = 1; j < i; j++) if(grup[i] == grup[j]) ok = 0;
		if(ok) r++;
	}

	printf("%d\n",r);

	return 0;
}