Cod sursa(job #566163)

Utilizator tinkyAndrei Ilisei tinky Data 28 martie 2011 18:36:42
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include<fstream>
#include<iostream>
using namespace std;
#define nmax 1010
#define ll long long
#define inf INT_MAX
#define dd double
// no comment
/*
struct panta{ll a,b,d;};
long long dist(int a, int b, int c, int d)
{
	return (a-c)*(a-c)+(b-d)*(b-d);
}
panta p[1000000];
ll x[1000],y[1000],k=0,n;
void citire()
{
	int i;
	ifstream in("trapez.in");
	in>>n;
	for (i=1;i<=n;i++)
		in>>x[i]>>y[i];
}
void calc_pante()
{
	int i,j;
	for (i=1;i<n;i++)
		for (j=i+1;j<=n;j++)
		{
			p[++k].a=y[i]-y[j];
			p[k].b=x[i]-x[j];
			p[k].d=dist(x[i],y[i],x[j],y[j]);
		}
}
int cmp(panta a, panta b)
{
	return a.a*b.b>a.b*b.a;
}
int solve()
{
	int t=0,i;
	for (i=1;i<n;i++)
	{
		if (p[i].b==0||p[i+1].b==0)
		{
			if (p[i].b==p[i+1].b)
			{
				t++;
				if (p[i].d==p[i+1].d)
					t++;
			}
		}
		else if (p[i].a*p[i+1].b==p[i].b*p[i+1].a)
		{
			t++;
			if (p[i].d==p[i+1].d)
				t++;
		}
	}
	return t;
}
	

int main()
{
	int zzz;
	citire();
	calc_pante();
	sort (p+1,p+k+1,cmp);
	panta asd,qwe;
	asd.a=asd.b=qwe.a=qwe.b=2;
	cout<<cmp(asd,qwe);
	ofstream out("trapez.out");
	zzz=solve();
	out<<zzz;	
}	
*/

struct panta {double p; int d;};
panta p[nmax*nmax];
ll x[nmax],y[nmax],n,k=0,d[nmax*nmax];
int dist(int q,int w,int e,int r)
{
	return (q-e)*(q-e)+(w-r)*(w-r);
}
void citire()
{
	int i;
	ifstream in("trapez.in");
	in>>n;
	for (i=1;i<=n;i++)
		in>>x[i]>>y[i];
}
double cmp(panta a, panta b)
{
	return a.p<b.p;
}
void calc_pante()
{
	int i,j;
	for (i=1;i<n;i++)
		for (j=i+1;j<=n;j++)
		{
			if (x[i]-x[j]==0)
				p[++k].p=inf;
				
			else
				p[++k].p=dd(y[i]-y[j])/dd(x[i]-x[j]);
			p[k].d=dist(x[i],y[i],x[j],y[j]);
		}
	sort(p+1,p+k+1,cmp);
}
int main()
{
	ll i,z=1,t=0;
	dd m;
	citire();
	calc_pante();
	m=p[1].p;
	for (i=2;i<=k;i++)
	{
		if (m==p[i].p)
			z++;
		else
		{
			z=z*(z-1)/2;
			m=p[i].p;
			t+=z;
			z=1;
		}
	}
	ofstream out("trapez.out");
	out<<t<<'\n';
}