Pagini recente » Borderou de evaluare (job #81464) | Cod sursa (job #81334)
Cod sursa(job #81334)
#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;
}