Cod sursa(job #371246)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 4 decembrie 2009 17:34:32
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#include <algorithm>
#define EPS 0.00000000000001
#define LMAX 1010
#define INF 2000000100
using namespace std;

struct punct
{
	int x, y;
} v[LMAX];

double m[LMAX*LMAX];
int n, l, sol;

int cmp(double a, double b)
{
	return a+EPS<b;
}

double modul(double a)
{
	if (a<0) a=-a;
	return a;
}

int main()
{
	freopen("trapez.in","r",stdin);
	freopen("trapez.out","w",stdout);
	scanf("%d",&n);
	int i, j;
	for (i=1; i<=n; i++) scanf("%d %d",&v[i].x,&v[i].y);
	for (i=1; i<=n; i++)
		for (j=i+1; j<=n; j++)
		{
			l++;
			if (v[j].y==v[i].y) m[l]=INF; else
			m[l]=double(v[j].x-v[i].x)/double(v[j].y-v[i].y);
		}
	sort(m+1, m+l+1, cmp);
	int c;
	for (i=1; i<=l; i++)
	{
		for (j=i; j<l && modul(m[j+1]-m[j])<=EPS; j++);
		c=j-i+1;
		sol+=c*(c-1)/2;
		i=j;
	}
	printf("%d",sol);
}