Cod sursa(job #2679709)

Utilizator Razvan48Capatina Razvan Nicolae Razvan48 Data 1 decembrie 2020 12:35:42
Problema Trapez Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

const int NMAX = 1000;

const double INF = 9000000000.0;

pair<double, double> vec[1 + NMAX];
vector<double> pante;

double epsilon = 0.001;

bool maiMicPrimul(double a, double b)
{
    return b - a > epsilon;
}

bool egal(double a, double b)
{
    return b - a < epsilon && a - b < epsilon;
}

int main()
{
    ifstream in("trapez.in");
    ofstream out("trapez.out");
    int n;

    in >> n;
    for (int i = 1; i <= n; i++)
    {
        in >> vec[i].first >> vec[i].second;

        for (int j = 1; j < i; j++)
        {
            if (egal(vec[j].first - vec[i].first, 0.0))
            {
                pante.emplace_back(INF);
            }
            else
            {
                pante.emplace_back((vec[j].second - 1.0 * vec[i].second) / (vec[j].first - vec[i].first));
            }
        }
    }

    sort(pante.begin(), pante.end());

    long long int sol = 0;

    double val = pante[0];
    long long int nr = 1;

    for (size_t i = 1; i < pante.size(); i++)
    {
        if (egal(val, pante[i]))
        {
            nr++;
        }
        else
        {
            sol += nr * (nr - 1) / 2;

            val = pante[i];
            nr = 1;
        }
    }

    sol += nr * (nr - 1) / 2;

    out << sol << '\n';

    return 0;
}