Cod sursa(job #2082358)

Utilizator Andrei243Nitu Mandel Andrei Andrei243 Data 6 decembrie 2017 00:25:46
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <limits.h>

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


struct punct
{
    int x,y;

};

double grupuri[510000];
punct puncte[1010];
int n ;
int k=1;
double e=0.000000000001;


int compara (const void * a, const void * b)
{
    if (*(double*)a > *(double*)b) return 1;
    else if (*(double*)a < *(double*)b) return -1;
    else return 0;
}

int cmmdc(int a,int b)
{
    if(b==0)
        return a;
    else return cmmdc(b,a%b);

}
double pantificare(punct x,punct y)
{
    int var1=y.y-x.y;
    int var2=y.x-x.x;
    if(var2==0)
    {

        return INT_MAX;
    }


    return (double)var1/var2;
}


void generare_pante()
{
    int i,j;
    for(i=1; i<n; ++i)
        for(j=i+1; j<=n; ++j)
        {
            grupuri[k]=pantificare(puncte[i],puncte[j]);
            k++;
        }
    k--;
}

int combinare_2(int n)
{
    return (n*(n-1))/2;


}



int main()
{
    in>>n;
    for(int i=1; i<=n; i++)
    {
        in>>puncte[i].x>>puncte[i].y;


    }
    generare_pante();
    qsort(grupuri+1,k,sizeof(double),compara);
    int it;
    long long nr_trapeze=0;

    double primul=grupuri[1];
    int nr=1;
    for(it=2; it<=k; it++)
    {

        if( (grupuri[it]>=primul&&grupuri[it]-primul<=e)||(primul>=grupuri[it]&&primul-grupuri[it]<=e) )
        {
            nr_trapeze+=nr;
            nr++;
        }
        else
        {
            primul=grupuri[k];
            nr=1;
        }


    }


//for(int s=1;s<=k;s++)cout<<grupuri[s]<<'\n';
    out<<nr_trapeze;


    return 0;
}