Cod sursa(job #44811)

Utilizator c_sebiSebastian Crisan c_sebi Data 31 martie 2007 19:00:38
Problema Regiuni Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>
#define MAX 101

struct {int x, y;} p[MAX];
struct {int a, b, c;} dr[MAX];

int np, ndr, nrg, grup[MAX][MAX], reg, cnrg;

int main()
{
	FILE *f, *g;
	f=fopen ("regiuni.in", "r");
	g=fopen ("regiuni.out", "w");
	int a, b, c, i, j, k, l;
	fscanf (f, "%d %d", &ndr, &np);
	for (i=1; i<=ndr; i++)
		fscanf (f, "%d %d %d", &dr[i].a, &dr[i].b, &dr[i].c);
	for (i=1; i<=np; i++)
		{fscanf (f, "%d %d", &p[i].x, &p[i].y);
		grup[1][i]=i;
		}
	fclose(f);
	nrg=2;
	grup[1][0]=np;
	for (i=1; i<=ndr; i++)
		{
			a=dr[i].a; b=dr[i].b; c=dr[i].c;
			for (j=1, cnrg=nrg; j<cnrg; j++)
			  {for (k=1; k<=grup[j][0]; k++)
				  if (grup[j][k])
					if (a*p[grup[j][k]].x + b*p[grup[j][k]].y + c < 0)
						{
							grup[nrg][++grup[nrg][0]]=grup[j][k];
							for (l=k; l<grup[j][0]; l++)
								grup[j][l]=grup[j][l+1];
							grup[j][0]--;
                     k--;
						}
				if (grup[nrg][0]) nrg++;
			  }
		}
	for (i=1; i<nrg; i++) if (grup[i][0]) reg++;
	fprintf (g, "%d\n", reg);
	fclose(g);
	return 0;
}