Pagini recente » Cod sursa (job #2738924) | Cod sursa (job #2624582) | Cod sursa (job #2187893) | Cod sursa (job #1892066) | Cod sursa (job #2082358)
#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;
}