Cod sursa(job #2082339)

Utilizator Andrei243Nitu Mandel Andrei Andrei243 Data 5 decembrie 2017 23:25:52
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 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, nr_0 ;
int k=1;
double e=0.000000001;


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){
nr_0++;
return 0;
}


return (double)var1/var2;
}


void generare_pante(){
int i,j;
for(i=1;i<n;++i)
    for(j=i+1;j<=n;++j)
        {
            int aux;
            int cond;
            do{ cond=nr_0;
            aux=pantificare(puncte[i],puncte[j]);
            if(nr_0!=cond){
            if(j<n)j++;
            else if(j==n&&i<n-1){
            i++;
            j=i+1;

            }
            else if(j==n&&i==n-1)break;

            }
            }while(cond!=nr_0);

            if(i==n-1&&cond!=nr_0)break;
            grupuri[k]=aux;k++;}
k--;
}

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


}

bool egalitate(double a,double b){
    if(a-b<e||a==b)return true;
    return false;

}

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


}
generare_pante();
qsort(grupuri+1,k-1,sizeof(double),compara);
int it;
int 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;
}