Pagini recente » Cod sursa (job #261770) | Cod sursa (job #2310631) | Cod sursa (job #2144480) | Cod sursa (job #1034970) | Cod sursa (job #1775875)
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <set>
#include <bitset>
#include <algorithm>
using namespace std;
struct Point
{
int x;
int y;
};
istream & operator>> (istream & in, Point & point)
{
in >> point.x >> point.y;
return in;
}
struct Segment
{
int a;
int b;
int c;
};
istream & operator>> (istream & in, Segment & segment)
{
in >> segment.a >> segment.b >> segment.c;
return in;
}
bool IsUpper(Point point, Segment segment)
{
return segment.a * point.x + segment.b * point.y + segment.c > 0;
}
ifstream in("regiuni.in");
ofstream out("regiuni.out");
int main()
{
int numberPoints, numberSegments;
in >> numberSegments >> numberPoints;
vector<Segment> segments(numberSegments);
copy_n(istream_iterator<Segment>(in), numberSegments, segments.begin());
set<vector<bool>> regions;
for_each(istream_iterator<Point>(in), istream_iterator<Point>(),
[&](Point point)
{
vector<bool> region(numberSegments);
transform(segments.begin(), segments.end(), region.begin(),
[&](const Segment & segment)
{
return IsUpper(point, segment);
});
regions.insert(region);
});
out << regions.size();
return 0;
}