Cod sursa(job #27033)

Utilizator marius135Dumitran Adrian Marius marius135 Data 6 martie 2007 00:22:23
Problema Trapez Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<stdio.h>
#include<math.h>
#include<stdlib.h>

#define maxn 1024
#define eps 0.000000001

long x[maxn],y[maxn];
long double v[maxn*maxn];

int  sort(const void *a, const void *b)
{
	if ((*(long double *)a - *(long double *) b)>0) return 1;
	return -1;
}

long double panta(long a,long b)
{
	long xx = y[b]-y[a];
	long yy = x[a]-x[b];
	if(yy==0) return +723.35;
	return (long double)xx/yy;

}
int aprox(long double a,long double b)
{if(a>=b && a -b<eps || b>=a && b-a <eps) return 1;
return 0;
}

int main()
{
	freopen("trapez.in","rt",stdin);
	freopen("trapez.out","wt",stdout);
	
	long n,s=0,i,j,nr=0,m;
	scanf("%ld",&n);
	for(i=1;i<=n;i++)
		scanf("%ld%ld",&x[i],&y[i]);
	for(i=1;i<=n;i++)
		for(j=i+1;j<=n;j++)
			v[++nr]=panta(i,j);
	
	qsort(v+1,nr,sizeof(v[0]),sort);
	v[0]=-4354;
	m=1;
	for(i=1;i<=nr;i++)
		{
		
		if( aprox(v[i],v[i-1]) )
			m++;
		else {s+=m*(m-1)/2;m=1;}
		
		
		}
	printf("%ld\n",s);
	
	return 0;
}