Pagini recente » Cod sursa (job #688555) | Cod sursa (job #3190103) | Cod sursa (job #3204326) | Cod sursa (job #1375901) | Cod sursa (job #1891715)
#include <fstream>
#include <vector>
#include <list>
using namespace std;
ifstream fin ("regiuni.in");
ofstream fout ("regiuni.out");
class dreapta { public : int a, b, c; } N[1010];
class punct { public : int x, y; } M[1010];
int n, m, g = 1;
vector < int > A;
list < int > L[1010];
bool Pos(punct p, dreapta d)
{
return (d.a * p.x + d.b * p.y + d.c > 0);
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i ++)
{
fin >> N[i].a >> N[i].b >> N[i].c;
}
for (int i = 1; i <= m; i ++)
{
fin >> M[i].x >> M[i].y;
L[g].push_back(i);
}
for (int i = 1; i <= n; i ++)
{
for (int j = 1, jj = g; j <= jj; j ++)
{
while (!A.empty()) A.pop_back();
int a = 0;
for (list < int > :: iterator it = L[j].begin(); it != L[j].end(); it ++)
{
if (Pos(M[*it], N[i])) A.push_back(*it);
else a ++;
}
if (!A.empty() && a > 0)
{
g ++;
vector < int > :: iterator it2 = A.begin();
for (list < int > :: iterator it1 = L[j].begin(); it1 != L[j].end() && it2 != A.end(); it1 ++)
{
while (it1 != L[j].end() && it2 != A.end() && *it1 == *it2)
{
it1 = L[j].erase(it1);
L[g].push_back(*it2);
it2 ++;
}
}
}
}
}
fout << g << '\n';
fout.close();
return 0;
}