Cod sursa(job #2456743)

Utilizator mircearoataMircea Roata Palade mircearoata Data 15 septembrie 2019 13:39:19
Problema Trapez Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
// (incarcarile precedente)
// timp de executie local PE TESTUL MAXIMAL:  0.404s
// timp de executie infoarena:               >0.550s
// MA OFER SA CUMPAR PROCESOR PENTRU INFOARENA

#pragma GCC optimize("O3")

#include <iostream>
#include <fstream>
#include <unordered_map>

using namespace std;

ifstream in("trapez.in");
ofstream out("trapez.out");

struct punct
{
    long double x, y;
};

istream & operator>> (istream & is, punct & p)
{
    is >> p.x >> p.y;
    return is;
}

long double panta(punct a, punct b)
{
    return (a.x == b.x) ? 1e20 : ((a.y - b.y) / (a.x - b.x));
}

unordered_map<long double, int> cnt;

int n;
punct v[1000];
unsigned long long ans;

int main()
{
    in >> n;
    for(int i = 0; i < n; i++)
        in >> v[i];
    for(int i = 0; i < n; i++)
        for(int j = i+1; j < n; j++)
            cnt[panta(v[i], v[j])]++;
    for(pair<long double, int> paralele : cnt)
        ans += 1LL * paralele.second * (paralele.second - 1) / 2;
    out << ans;
    return 0;
}