Cod sursa(job #2082261)

Utilizator Andrei243Nitu Mandel Andrei Andrei243 Data 5 decembrie 2017 21:32:24
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
//#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
ifstream in("trapez.in");
ofstream out("trapez.out");
struct panta {
int a,b;

};

struct punct{
int x,y;

};

panta grupuri[51000];
punct puncte[1010];
int n;

int compara(const void *a,const void *c){

return ( ((*((panta*)a)).a)*((*((panta*)c)).b)<((*((panta*)a)).b)*((*((panta*)c)).a)        );

};

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

}

panta pantificare(punct x,punct y){
panta z;
z.a=y.y-x.y;
z.b=y.x-x.x;
int div=cmmdc(z.a,z.b);
z.a/=div;
z.b/=div;

}


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

}

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


}

bool egalitate(panta a,panta b){
if(a.a==b.a&&a.b==b.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,n*(n+1)/2,sizeof(panta),compara);
int k=1;
int nr_trapeze=0;
while(k<=n){
int nr_asemeena=1;
while(egalitate(grupuri[k],grupuri[k+1])){
k++;
nr_asemeena++;

}
if(nr_asemeena!=1)nr_trapeze+=combinare_2(nr_asemeena);
k++;

}

out<<nr_trapeze;
    return 0;
}