Cod sursa(job #345712)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 4 septembrie 2009 13:11:55
Problema Regiuni Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <cstdio>

#define file_in "regiuni.in"
#define file_out "regiuni.out"

#define Nmax 1001

int n,mm,i,j,k;
int a[Nmax],b[Nmax],c[Nmax];
int x[Nmax],y[Nmax];
int *v[Nmax];
int nrr,d;
int p[Nmax];
int m[Nmax];

int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d", &n,&mm);
	
	for (i=1;i<=n;++i)
		 scanf("%d %d %d", &a[i], &b[i],&c[i]);
	
	v[1]=new int [mm+1];
	v[1][0]=0;
	for (i=1;i<=mm;++i)
	{
		scanf("%d %d", &x[i], &y[i]);
		v[1][++v[1][0]]=i;
	}
	
	//aloca dinamic
	//for (i=1;i<=mm;++i)
	//{
		/*v[1]=(int *)realloc(v[1], sizeof(int));
		v[1][0]=0;*/
	//}
	/*v[1]=new int [mm+1];
	v[1][0]=0;
	for (i=1;i<=mm;++i)
	{
		v[1][0]++;
		//v[1]=(int *)realloc(v[1], (v[1][0]+1)*sizeof(int));
		v[1][v[1][0]]=i;
	}*/
	
	nrr=1;
	
	for (i=1;i<=n;++i)
		 for (j=1;j<=nrr;++j)
		 {
			p[0]=m[0]=0; 
			for (k=1;k<=v[j][0];++k)
			{
				d=a[i]*x[v[j][k]]+b[i]*y[v[j][k]]+c[i];
				if (d>0)
					p[++p[0]]=v[j][k];
				else
					m[++m[0]]=v[j][k];
			}
		
		if (p[0]!=0 && m[0]!=0)
        {
	
			delete(v[j]);
			
			/*v[j]=(int *)realloc(v[j], sizeof(int));
		    v[j][0]=0;
			v[j][0]++;
		    v[j]=(int *)realloc(v[j], (p[0]+1)*sizeof(int));*/
			v[j]=new int [p[0]+1]; 
		    v[j][0]=p[0];
			
			for (k=1;k<=p[0];++k)
				 v[j][k]=p[k];
			nrr++;
			
			/*v[nrr]=(int *)realloc(v[nrr], sizeof(int));
		    v[nrr][0]=0;
			v[nrr][0]++;
		    v[nrr]=(int *)realloc(v[nrr], (m[0]+1)*sizeof(int));*/
			v[nrr]=new int [m[0]+1];
		    v[nrr][0]=m[0];
			
			for (k=1;k<=m[0];++k)
				 v[nrr][k]=m[k];
		//printf("kkkkkkkkkkkkkkkkkt\n");
		}
	}
	
	printf("%d", nrr);

	fclose(stdin);
	fclose(stdout);
	
	return 0;
}