Cod sursa(job #1662123)

Utilizator AlexVolatiluVoicu Alex AlexVolatilu Data 24 martie 2016 15:14:25
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
#include <algorithm>
#include <cmath>

using namespace std;

const double eps=1.e-14;
const double inf=1e14;

struct point
{
	int x,y;
}v[1001];
double m[500000];

int main()
{
    freopen("trapez.in","r",stdin);
    freopen("trapez.out","w",stdout);
    int n,i,j,k=0;
    long long nr=0,l=1;

    scanf("%d",&n);
    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++)
		{
			if(v[i].x-v[j].x==0)
				m[++k]=inf;
			else m[++k]=(double)(v[i].y-v[j].y)/(v[i].x-v[j].x);
		}
	}
	sort(m+1,m+k+1);
	for(i=2;i<=k;i++)
	{
        if(fabs(m[i]-m[i-1])<eps) l++;
        else
		{
            nr+=((long long)l*(l-1))>>1;
            l=1;
		}
	}
	nr+=((long long)l*(l-1))>>1;
	printf("%lld",nr);

    return 0;
}