Cod sursa(job #2679701)

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

using namespace std;

const int NMAX = 1000;

const double INF = 100000000.0;

pair<int, int> 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.push_back(INF);
            }
            else
            {
                pante.push_back((1.0 * (vec[j].second - vec[i].second)) / (1.0 * (vec[j].first - vec[i].first)));
            }
        }
    }

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

    int sol = 0;

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

    for (int 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;
}