Cod sursa(job #1102)

Utilizator ionescu_bogdanIonescu Bogdan-Gabriel ionescu_bogdan Data 12 decembrie 2006 18:28:57
Problema Triang Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#include <stdlib.h>

#define nmax 1510
#define err 0.001

struct pct
{
	double x,y;
};

int n,i,j,sol;
double x,y;
pct a[nmax],tmp;

int fc(const void *aa,const void *bb)
{
	if ((*(pct*)aa).x-(*(pct*)bb).x>err)
		return 1;
	if ((*(pct*)bb).x-(*(pct*)aa).x>err)
		return -1;
	if ((*(pct*)aa).y-(*(pct*)bb).y>err)
		return 1;
	if ((*(pct*)bb).y-(*(pct*)aa).y>err)
		return -1;
	return 0;
}

int main()
{
	freopen("triang.in","r",stdin);
	freopen("triang.out","w",stdout);

	scanf("%d",&n);
	for (i=0;i<n;i++)
		scanf("%lf%lf",&x,&y),a[i].x=x,a[i].y=y;

	qsort((void*)a,n,sizeof(a[0]),fc);

	for (i=0;i<n;i++)
		for (j=i+1;j<n;j++)
		{
			tmp.x=(a[j].x-a[i].x)*0.5-(a[j].y-a[i].y)*1.7320508*0.5+a[i].x;
			tmp.y=(a[j].x-a[i].x)*1.7320508*0.5+(a[j].y-a[i].y)*0.5+a[i].y;
			if (bsearch(&tmp,(void*)a,n,sizeof(a[0]),fc))
				sol++;
			tmp.x=(a[j].x-a[i].x)*0.5+(a[j].y-a[i].y)*1.7320508*0.5+a[i].x;
			tmp.y=-(a[j].x-a[i].x)*1.7320508*0.5+(a[j].y-a[i].y)*0.5+a[i].y;
			if (bsearch(&tmp,(void*)a,n,sizeof(a[0]),fc))
				sol++;
		}

	printf("%d\n",sol/3);

	return 0;
}