Pagini recente » Cod sursa (job #2303414) | Cod sursa (job #2597053) | Cod sursa (job #260061) | Cod sursa (job #2624058) | Cod sursa (job #2368112)
#include <bits/stdc++.h>
#define prim1 4001
#define prim2 4003
using namespace std;
const int nMax = 1005;
ifstream fin("regiuni.in");
ofstream fout("regiuni.out");
struct Triplu
{
int a, b, c;
} d[nMax];
struct Dublu
{
int x, y;
} p[nMax], cod[nMax];
int n, m, sol;
void Read()
{
fin >> m >> n;
for (int i = 1; i <= m; i++)
fin >> d[i].a >> d[i].b >> d[i].c;
for (int i = 1; i <= n; i++)
fin >> p[i].x >> p[i].y;
}
inline bool Semn(int a, int b, int c, int x, int y)
{
return ( (a * x + b * y + c) > 0);
}
inline bool CMP(const Dublu A, const Dublu B)
{
if (A.x == B.x)
return A.y < B.y;
return A.x < B.x;
}
void Solve()
{
int i, j, s1, s2;
/// Luam toate punctele si le codificam in functie
/// de pozitia lor fata de toate dreptele
for (i = 1; i <= n; i++)
{
s1 = 0;
s2 = 0;
for (j = 1; j <= m; j++)
{
s1 = s1 * 10;
s2 = s2 * 10;
if (Semn(d[j].a, d[j].b, d[j].c, p[i].x, p[i].y))
{
s1++;
s2++;
}
s1 = s1 % prim1;
s2 = s2 % prim2;
}
cod[i] = {s1, s2};
}
sort(cod + 1, cod + n + 1, CMP);
for (i = 1; i <= n; i++)
if (cod[i].x != cod[i - 1].x && cod[i].y != cod[i - 1].y)
sol++;
fout << sol << "\n";
}
int main()
{
Read();
Solve();
fin.close();
fout.close();
return 0;
}