Pagini recente » Cod sursa (job #137165) | Cod sursa (job #1764404) | Cod sursa (job #28960) | Cod sursa (job #2298443) | Cod sursa (job #39755)
Cod sursa(job #39755)
# include <stdio.h>
# include <string.h>
# include <math.h>
# define _fin "regiuni.in"
# define _fout "regiuni.out"
# define maxn 1001
int x[maxn], y[maxn], // puncte
a[maxn], b[maxn], c[maxn], // linii
m, n, i, j, k, ok, sol,
g[maxn][maxn], ng,
g1[maxn], g2[maxn];
inline int sign(int x) { return x>0?1:-1; }
inline int calc(int i, int j) { return a[i]*x[j]+b[i]*y[j]+c[i]; };
void readf()
{
freopen(_fin, "r", stdin);
for (scanf("%d%d", &m, &n), i=1; i<=m; i++) scanf("%d%d%d", a+i, b+i, c+i);
for (i=1; i<=n; i++) scanf("%d%d", x+i, y+i);
}
void solve()
{
int aux;
for (i=ng=1, g[1][0]=n; i<=n; i++) g[1][i]=i;
for (i=1; i<=m; i++) {
for (j=ng; j>=1; j--)
{
g1[0]=g2[0]=0;
for (k=1; k<=g[j][0]; k++)
if ( sign( aux=calc(i, g[j][k]) )>0 ) g1[++g1[0]] = g[j][k];
else g2[++g2[0]] = g[j][k];
if ( g1[0]&&g2[0] ) {
memcpy(g[j], g1, sizeof(g1));
memcpy(g[++ng], g2, sizeof(g2));
}
}
}
}
int main()
{
readf();
freopen(_fout,"w", stdout);
solve();
printf("%d\n", ng);
return 0;
}