Pagini recente » Cod sursa (job #456963) | Cod sursa (job #2828692) | Cod sursa (job #2526436) | Cod sursa (job #18071) | Cod sursa (job #40098)
Cod sursa(job #40098)
#include <stdio.h>
#define dim 1001
struct dreapta
{ int a, b, c; } A[dim];
struct punct
{ int x, y; } B[dim];
int n, m, Sol;
int g[dim], conf[dim][34];
void Read();
void Solve();
void Write();
int same(int, int);
int main()
{
Read();
Solve();
Write();
return 0;
}
void Read()
{
freopen("regiuni.in", "r", stdin);
scanf("%d %d", &n, &m);
int i;
for(i=1; i<=n; ++i)
scanf("%d %d %d", &A[i].a, &A[i].b, &A[i].c);
for(i=1; i<=m; ++i)
scanf("%d %d", &B[i].x, &B[i].y);
fclose(stdin);
}
void Solve()
{
int i, j, found;
long config;
for(i=1; i<=m; ++i)
for(j=1; j<=n; ++j)
{
config = ((A[j].a * B[i].x) + (A[j].b * B[i].y) + A[j].c);
if( config > 0 )
conf[i][j/32] |= ( 1 << (j%32) );
}
Sol = 1;
g[1] = 1;
for(i=2; i<=m; ++i)
if( !g[i] )
{
found = 0;
for(j=1; j<i; ++j)
if( same(i, j) )
if(g[j])
{
g[i] = g[j];
found = 1;
break;
}
if( !found )
g[i] = ++ Sol;
}
}
void Write()
{
freopen("regiuni.out", "w", stdout);
printf("%d", Sol);
fclose(stdout);
}
int same(int k, int l)
{
int i;
for(i=0; i<=(n/32); ++i)
if( conf[k][i] != conf[l][i] ) return 0;
return 1;
}