Cod sursa(job #504755)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 28 noiembrie 2010 16:36:55
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream>
#include<algorithm>
#define NMAX 1004

using namespace std;

ifstream f("trapez.in");
ofstream g("trapez.out");

struct panta{int a, b;} p[NMAX*NMAX];
struct punct{int x, y;} a[NMAX];

int n, m;
long long pos;

void pante()
{
	int A, B, nv=0, no=0, aa, bb;
	for (A=1; A<n; ++A)
		for (B=A+1; B<=n; ++B)
		{
			aa=a[A].y-a[B].y;
			bb=a[A].x-a[B].x;
			if (aa==0) ++no;
			if (bb==0) ++nv;
			if (aa!=0 && bb!=0) {p[++m].a=aa;p[m].b=bb;}
		}
	pos=no*(no-1)/2+nv*(nv-1)/2;
}

inline int cmp(panta w, panta q)
{
	return q.b*w.a<q.a*w.b;
}
	
void citeste()
{
	int i;
	f>>n;
	for (i=1; i<=n; ++i) f>>a[i].x>>a[i].y;
	pante();
}

void cauta()
{
	int i;
	long long nr=1;
	for (i=2; i<=m; ++i)
		if (p[i-1].a*p[i].b==p[i-1].b*p[i].a) ++nr;
		else 
		{
			pos=pos+(nr*(nr-1)/2);
			nr=1;
		}
	pos=pos+(nr*(nr-1)/2);
}

int main()
{
	citeste();
	sort(p+1, p+m+1, cmp);
	cauta();
	g<<pos<<"\n";
	f.close();
	g.close();
	return 0;
}