Cod sursa(job #867405)

Utilizator Alexandru098Costea Vlad Alexandru098 Data 29 ianuarie 2013 17:51:14
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstdlib>
#define Infinit (1u<<31)-1
#define eps 1.e-14

using namespace std;

class POINT
{
	private:int x,y;
	public:
	POINT()
	{
		x=0;y=0;
	}
	void set(int a,int b)
	{
		x=a;y=b;
	}
	int getx()
	{
		return x;
	}
	int gety()
	{
		return y;
	}
};

int i,j,x,y,wut,k,maxx,n;

int cmp(double a,double b)
{
    if(a-b<=-eps)
    {
        return 1;
    }
    return 0;
}

POINT v[1005];
double v2[1000005];

int main()
{
	freopen("trapez.in","r",stdin);
	freopen("trapez.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d%d",&x,&y);
		v[i].set(x,y);
	}
	for(i=1;i<=n;i++)
	{
		for(j=i+1;j<=n;j++)
		{
			wut++;
			if(v[j].getx()==v[i].getx())
			{
				v2[wut]=Infinit;
			}
			else
			{
				v2[wut]=((double)v[j].gety()-v[i].gety())/(v[j].getx()-v[i].getx());
			}
		}
	}
	sort(v2+1,v2+wut+1,cmp);
	for(i=1;i<=n;i++)
	{
		if(v2[i-1]==v2[i])
		{
			k++;
		}
		else
		{
			maxx+=k*(k-1)/2;
			k=1;
		}
	}
	maxx+=k*(k-1)/2;
	printf("%d",maxx);
	return 0;
}