Cod sursa(job #1142853)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 14 martie 2014 12:14:34
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;
const double eps=1.e-14;
const double inf=2000000100;

struct point
{
	double x, y;
};

point a[1005];
double l[1005];

bool vertical(point a, point b)
{
	return fabs(a.x-b.x)<eps;
}
double panta(point a, point b)
{
	if(vertical(a, b))return inf;
	return (b.y-a.y)/(b.x-a.x);
}
bool egal(double a, double b)
{
	return fabs(a-b)<eps;
}

int main()
{
    freopen("trapez.in", "r", stdin);
    freopen("trapez.out", "w", stdout);
    int n;
    scanf("%d", &n);
    for(int i=0;i<n;i++)
	{
		double x, y;
		scanf("%lf%lf", &x, &y);
		a[i].x=x;a[i].y=y;
	}
	int k=0;
	for(int i=0;i<n;i++)
		for(int j=i+1;j<n;j++)
		{
			l[k++]=panta(a[i], a[j]);
		}
	sort(l, l+k);
	int nrpr=0, nr=1;
	for(int i=0;i<k-1;i++)
	{
		if(egal(l[i], l[i+1]))nr++;
		else
		{
			nrpr+=(nr*(nr-1)/2);
			nr=1;
		}
	}
	nrpr+=(nr*(nr-1)/2);
	printf("%d", nrpr);
    return 0;
}