Cod sursa(job #2618178)

Utilizator TaveNeagoe Gabriel-Octavian Tave Data 23 mai 2020 20:09:22
Problema Trapez Scor 30
Compilator cpp-32 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");

struct{
    long long x,y;
}pct[1011];

int main()
{
    unsigned N, rez=0, combinari=1;
    vector <long double> panta;

    fin>>N;
    for(unsigned i=0; i<N; i++)//citire
        fin>>pct[i].x>>pct[i].y;

    for(unsigned i=0; i<N; i++)
        for(unsigned j=i+1; j<N; j++){
            if(pct[i].y != pct[j].y) //daca punctele sunt diferite pe Oy le consider panta
                panta.push_back((long double)(pct[j].y-pct[i].y)/(pct[j].x-pct[i].x));
            else
                panta.push_back(2e9+7); //dummy value
        }

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

    for(unsigned i=0; i<panta.size(); i++){
        if(panta[i] == panta[i-1]) //cat timp am aceeasi panta, maresc numarul de "combinari" de paralele cu care o sa formez trapezele
            combinari++;
        else{
            rez += combinari*(combinari-1)/2; //cand combinari e 1 adaug 0
            combinari = 1;
        }
    }

    panta.clear();

    fout<<rez;

    return 0;
}