Cod sursa(job #2614)

Utilizator darklordHabalau Andrei darklord Data 18 decembrie 2006 12:32:14
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <stdio.h>
#define dim 1002

long n,i,j,k,s;

long x[dim],y[dim];

struct panta
{	int y, x;
}d[dim];


int imp(long ls,long ld);

void qsort(long ls,long ld);

int main ()
{	freopen ("trapez.in","r",stdin);
	freopen ("trapez.out","w",stdout);
	scanf("%ld",&n);
	for(i=0;i<n;++i)
		scanf("%ld%ld",&x[i],&y[i]);
	for(i=0;i<n-1;++i)
	{   for(j=i+1;j<n;++j)
		{   d[++k].y=y[i]-y[j];
			d[k].x=x[i]-x[j];
		}
	}
	qsort(1,k);
	for(i=1;i<k;++i)
	{	if(d[i].y==d[i+1].x&&d[i].x==d[i+1].y)
			++s;
	}
	printf("%ld",s);
	fclose(stdin);fclose(stdout);
	return 0;
}

void qsort(long ls,long ld)
{	long poz=imp(ls,ld);
	if(poz-1>ls)
		qsort(ls,poz-1);
	if(ld>poz+1)
		qsort(poz+1,ld);
}
int imp(long ls,long ld)
{   long dir,ii=0,jj=-1;
	while(ls<=ld)
	{	if(d[ls].y>d[ld].y)
		{	panta aux=d[ls];
			d[ls]=d[ld];d[ld]=aux;
			dir=ii;
			ii=-jj;
			jj=-dir;
		}
		else
			if(d[ls].y==d[ld].y)
				if(d[ls].x>d[ld].x)
				{	panta aux=d[ls];
					d[ls]=d[ld];d[ld]=aux;
					dir=ii;
					ii=-jj;
					jj=-dir;
				}
		ls+=ii;ld+=jj;
	}
	return ls;
}