Cod sursa(job #56804)

Utilizator coderninuHasna Robert coderninu Data 30 aprilie 2007 15:03:28
Problema Regiuni Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <stdio.h>
#define infile "regiuni.in"
#define outfile "regiuni.out"

int n,m,i,j,d[1001],rez;
struct {int x,y;} pct[1001];
struct {float x,y;} dr[2][1001];
int aux[21700];

void ReadData()
{
 int a,b,c,temp;
 FILE *fin=fopen(infile , "r");
 fscanf(fin, "%d %d\n", &n, &m);
 for (i=0; i<n; i++)
     {
      fscanf(fin, "%d %d %d\n", &a, &b, &c);
      if (a==0)
	  {
	   temp=float(-c)/b;
	   dr[0][i].x=0;
	   dr[0][i].y=temp;
	   dr[1][i].x=1;
	   dr[1][i].y=temp;
	  }
      if (b==0)
	  {
	   temp=float(-c)/a;
	   dr[0][i].x=temp;
	   dr[0][i].y=0;
	   dr[1][i].x=temp;
	   dr[1][i].y=1;
	  }
      if (a!=0 && b!=0)
	  {
	   temp=float(-c)/a;
	   dr[0][i].x=temp;
	   dr[0][i].y=0;
	   temp=float(-c)/b;
	   dr[1][i].x=0;
	   dr[1][i].y=temp;
	  }
     }
 for (i=0; i<m; i++)
     fscanf(fin, "%d %d\n", &pct[i].x, &pct[i].y);
 fclose(fin);
}

int poz(int a, int b)
{
 return(pct[a].y-dr[0][b].y)*(dr[1][b].x-dr[0][b].x)-(pct[a].x-dr[0][b].x)*(dr[1][b].y-dr[0][b].y);
}

void Solve()
{
 int max=0;
 for (i=0; i<n; i++)
      for (j=0; j<m; j++)
	   if (poz(j,i)>0) d[j]=i+d[j]+1;
 for (i=0; i<m; i++)
     {
      aux[d[i]]=1;
      if (d[i]>max) max=d[i];
     }
 rez=0;
 for (i=0; i<=max; i++)
     if (aux[i])
	rez++;
}

void WriteData()
{
 FILE *fout=fopen(outfile, "w");
 fprintf(fout, "%d", rez);
 fclose(fout);
}

int main()
{
 ReadData();
 Solve();
 WriteData();
 return 0;
}