Pagini recente » Cod sursa (job #2640960) | Cod sursa (job #2842825) | Cod sursa (job #1745386) | Cod sursa (job #682000) | Cod sursa (job #2082261)
//#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;
}