Cod sursa(job #81334)

Utilizator coderninuHasna Robert coderninu Data 1 septembrie 2007 14:46:35
Problema Regiuni Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <stdlib.h>
#define infile "regiuni.in"
#define outfile "regiuni.out"

struct punct { int x,y; };
struct dreapta { int a ,b ,c; };

punct * pct;
dreapta * dr;
int i, j, n, m;
long *c;
long max=1, rez;
short * uz;

void readdata();
void solve();
void writedata();

int ok(punct,dreapta);

int main()
{
 readdata();
 solve();
 writedata();
 return 0;
}

void readdata()
{
 freopen(infile, "r", stdin);
 scanf("%d %d\n", &n, &m);
 pct=new punct [m+1];
 dr=new dreapta [n+1];
 for (i=1; i<=n; i++)
     scanf("%d %d %d\n", &dr[i].a, &dr[i].b, &dr[i].c);
 for (i=1; i<=m; i++)
     scanf("%d %d\n", &pct[i].x, &pct[i].y);
 fclose(stdin);
}

void writedata()
{
 freopen(outfile, "w", stdout);
 printf("%ld\n", rez);
 fclose(stdout);
}

void solve()
{
 uz=(short *)calloc(n*(n+1)/2, sizeof(short));
 c=(long *)calloc(m+1, sizeof(long));
 for (i=1; i<=m; i++)
     {
      for (j=1; j<=n; j++)
	  if (ok(pct[i],dr[j]))
	      c[i]+=j;
      if (!uz[c[i]])
	  {
	   uz[c[i]]=1;
	   rez++;
	  }
     }
}

int ok(punct p, dreapta d)
{
 if (d.a*p.x+d.b*p.y+d.c<0) return 1;
 return 0;
}