Pagini recente » Cod sursa (job #2426164) | Cod sursa (job #2158160) | Istoria paginii utilizator/vlad_nitu | Cod sursa (job #110799) | Cod sursa (job #1774888)
#include <iostream>
#include <fstream>
#include <unordered_set>
#include <vector>
#include <bitset>
#define MAX 1005
using namespace std;
struct Dreapta
{
int a;
int b;
int c;
};
struct Punct
{
int x;
int y;
};
int CalculeazaEcuatiaDreptei(const Dreapta dreapta, const Punct punct)
{
return dreapta.a * punct.x + dreapta.b * punct.y + dreapta.c;
}
void ReadInput(vector<Dreapta> &drepte, vector<Punct> &puncte, ifstream &in)
{
for(auto& d : drepte)
{
in >> d.a >> d.b >> d.c;
}
for(auto& p : puncte)
{
in >> p.x >> p.y;
}
}
int CalculeazaNumarulDeRegiuni( vector<Dreapta> drepte, int numarDrepte,
vector<Punct> puncte, int numarPuncte )
{
unordered_set<bitset<MAX>> regiuni;
bitset<MAX> regiune;
for(int j = 0; j < numarPuncte; ++j)
{
for(int i = 0; i < numarDrepte; ++i)
{
regiune[i] = ( CalculeazaEcuatiaDreptei(drepte[i], puncte[j]) > 0 );
}
regiuni.insert(regiune);
}
return regiuni.size();
}
int main()
{
int numarDrepte;
int numarPuncte;
ifstream in("regiuni.in");
in >> numarDrepte >> numarPuncte;
vector<Dreapta> drepte(numarDrepte);
vector<Punct> puncte(numarPuncte);
ReadInput(drepte, puncte, in);
in.close();
ofstream out("regiuni.out");
out << CalculeazaNumarulDeRegiuni( drepte, numarDrepte, puncte, numarPuncte );
out.close();
return 0;
}