Cod sursa(job #2758350)

Utilizator ste2021Stefan Stefan ste2021 Data 9 iunie 2021 22:04:02
Problema Trapez Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream>
#include<algorithm>

using namespace std;

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

struct coordonate
{
    long long x,y;

} v[1009];

long long n, i, j, k, solutie, nr;

double panta[1000009];
int main()
{
    f>>n;

    for(int i=0; i<n; i++)
        f>>v[i].x>>v[i].y;
 //vom folosi panta fiecarei linii pentru a verifica daca doua linii sunt paralele
    for(int i=0; i<n-1; i++)
        for(int j=i+1; j<n; j++)
        {
            if(v[i].x-v[j].x)
            {
                panta[k++] = (double)(v[i].y-v[j].y)/(v[i].x-v[j].x);
            }
        }
//sortam vectorul pentru a-l parcurge si vedea cate pante consecutive sunt egale
    sort(panta,panta+k);

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

    f.close();
    g.close();

    return 0;
}