Cod sursa(job #2619484)

Utilizator ADRIAN.CATRINOIUAdrian Catrinoiu ADRIAN.CATRINOIU Data 27 mai 2020 19:36:33
Problema Trapez Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");

struct puncte
{
    double x,y;
}v[1005];

int main()
{
    int n,i,j,m;
    double pante[1000005];
    fin>>n;
    //citim punctele
    for(i=1;i<=n;i++)
    {
        fin>>v[i].x>>v[i].y;
    }
    //vom folosi panta fiecarei linii pentru a verifica daca doua linii sunt paralele
    int nr_pante=0;
    for(i=1;i<n;i++)
    {
        for(j=i+1;j<=n;j++)
        {
            nr_pante++;
            if(v[j].x-v[i].x==0)
                {
                    pante[nr_pante]=INT_MAX;
                }
            else
            {
                pante[nr_pante]=(v[i].y-v[j].y)/(v[i].x-v[j].x);
            }
        }
    }
   /* fout<<'\n';
    for(i=1;i<nr_pante;i++)
        fout<<pante[i]<<'\n';*/
    //sortam vectorul pentru a-l parcurge si vedea cate pante consecutive sunt egale
    sort(pante+1,pante+nr_pante+1);
/*        fout<<'\n';

for(i=1;i<nr_pante;i++)
        fout<<pante[i]<<'\n';*/
    int trapez=0;
    j=1;
    for(i=2;i<=nr_pante;i++)
    {
        //daca doua pante sunt egale atunci crestem numarul de trapeze posibile
        if(pante[i]==pante[i-1])
            j++;
        else
        {
            //daca avem mai mult de 1 trapez care se poate face cu 2 linii il adaugam
            trapez+=(j*(j-1))/2;
            //reinitializam nr de trapeze posibile la 0 pentru a continua
            j=1;
        }


    }

    trapez+=(j*(j-1))/2;
    fout<<trapez;
    return 0;
}