Pagini recente » Cod sursa (job #732516) | Cod sursa (job #1957126) | Cod sursa (job #470560) | Cod sursa (job #685527) | Cod sursa (job #595195)
Cod sursa(job #595195)
# include <cstdio>
const char *FIN = "regiuni.in", *FOU = "regiuni.out";
const int MAX = 1001 ;
short A[MAX], B[MAX], C[MAX], X[MAX], Y[MAX], dp[MAX], viz[MAX], cnt[MAX], region[MAX];
int N, M, solution = 1;
int signum (int A, int B, int C, int X, int Y) {
int exp = A * X + B * Y + C;
return (exp < 0 ? -1 : (exp > 0 ? 1 : 0)) ;
}
int main (void) {
freopen (FIN, "r", stdin) ;
scanf ("%d %d", &N, &M) ;
for (int i = 1 ; i <= N; ++i)
scanf ("%hd %hd %hd", A + i, B + i, C + i);
for (int i = 1; i <= M; ++i)
scanf ("%hd %hd", X + i, Y + i), region[i] = 1;
for (int i = 1; i <= N; ++i) {
for (int j = 1; j <= solution; ++j)
dp[j] = viz[j] = cnt[j] = 0;
for (int j = 1; j <= M; ++j) {
++cnt[region[j]];
dp[region[j]] += signum (A[i], B[i], C[i], X[j], Y[j]) == 1;
}
for (int j = 1; j <= M; ++j) {
if (dp[region[j]] && dp[region[j]] < cnt[region[j]]) {
if (signum (A[i], B[i], C[i], X[j], Y[j]) == -1) {
if (viz[region[j]] == 0) viz[region[j]] = ++solution;
region[j] = viz[region[j]];
}
}
}
}
fprintf (fopen (FOU, "w"), "%d", solution) ;
}