Cod sursa(job #801864)

Utilizator Marius96Marius Gavrilescu Marius96 Data 25 octombrie 2012 11:57:06
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<cstdio>
#include<cmath>
#include<algorithm>
#define EPSILON 1e-4

int x[1005],y[1005];
double m[1000005];
int nm;

double slope (int i,int j)
{
	double d1=y[i]-y[j];
	double d2=x[i]-x[j];

	return d1/d2;
}

bool eq (double a,double b)
{
	if(isinf (a))
		return isinf (b);
	return fabs (a-b)<EPSILON;
}
int main()
{
	freopen ("trapez.in","r",stdin);
	freopen ("trapez.out","w",stdout);

	int n;
	scanf ("%d",&n);

	for(int i=0;i<n;i++)
		scanf ("%d%d",x+i,y+i);

	for(int i=0;i<n;i++)
		for(int j=i+1;j<n;j++)
			m[nm++]=slope (i,j);

	std::sort (m,m+nm);

	int r=0;
	for(int i=0;i<nm;i++){
		int cm=i;
		while(i<nm&&eq (m[i+1],m[cm]))
			i++;

		r+=(i-cm+1)*(i-cm)/2;
	}

	printf ("%d",r);
	return 0;
}