Cod sursa(job #1775867)

Utilizator dcutitoiuCutitoiu Adrian-Nicolae dcutitoiu Data 10 octombrie 2016 19:32:43
Problema Regiuni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#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;
}