Cod sursa(job #694044)

Utilizator auRSTARHreapca Aurelian auRSTAR Data 27 februarie 2012 18:17:04
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<cstdio>
#include<cmath>
#include<algorithm>
#define epsilon 0.0000000000001
using namespace std;
void read(),solve();
int n,i,x[1010],y[1010],precalc[1010],SOL,j,a,b,c,d,k,X;
double ung,M[500600],cnt;
int main()
{
	read();
	solve();
	return 0;
}
void read()
{
	freopen("trapez.in","r",stdin);
	freopen("trapez.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d%d",&x[i],&y[i]);
		precalc[i]=precalc[i-1]+i-1;
	}
}
void solve()
{
	for(i=1;i<=n;i++)
		for(j=i+1;j<=n;j++)
		{
			a=x[i];b=y[i];
			c=x[j];d=y[j];
			if(a>c){swap(a,c);swap(b,d);}
			if(a==c&&b>d){swap(a,c);swap(b,d);}
			ung=atan2(double(d-b),double(c-a));
			M[++k]=ung;
		}
	sort(M+1,M+precalc[n]+1);
	cnt=M[1];X=1;
	for(i=2;i<=precalc[n];i++)
	{
		if(M[i]-cnt<=epsilon)
		{
			++X;
			continue;
		}
		SOL+=precalc[X];
		X=1;
		cnt=M[i];
	}
	//SOL+=precalc[X];
	printf("%d\n",SOL);
}