Cod sursa(job #199363)

Utilizator cipPaduraru Ciprian - Ionut cip Data 18 iulie 2008 11:42:45
Problema Triang Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.98 kb
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>

#define MAXD		1500
#define EPSILON		0.0001
#define min(a,b) ( a < b ? a : b)

float Dist[MAXD][MAXD];

int n;
struct Point 
{
public:
	float x,y;
};

Point Points[MAXD + 1];
/*
void cautBin1(int i, int j ,int x)
{
	if (i <= j)
	{
		int mijloc = i + ((j - i)>>1);
		if (Numbers[mijloc] <= x)
		{
			if (Numbers[mijloc] == x)
				result = mijloc;

			cautBin1(mijloc + 1 , j, x);
		}
		else
			cautBin1(i , mijloc - 1, x);
	}
}

void cautBin2(int i, int j, int x)
{
	if (i <= j)
	{
		int mijloc = i + ((j - i)>>1);
		if (Numbers[mijloc] <= x)
		{
			result = mijloc;
			cautBin2(mijloc + 1 , j , x);
		}
		else
			cautBin2(i, mijloc - 1 , x);
	}
}

void cautBin3(int i , int j , int x)
{
	if (i <= j)
	{
		int mijloc = i + ((j - i)>>1);
		if (Numbers[mijloc] < x)
			cautBin3(mijloc + 1, j, x);
		else
		{
			result = mijloc ;
			cautBin3(i, mijloc - 1 , x);
		}
	}
}

long long  NumberOf0s(long long  iN)
{
	long long  S5 = 0 , S2 = 0 , copy = iN;

	while(iN){ S5 += (iN /= 5); }
	while(copy) { S2 += (copy /= 2);}

	return min(S5,S2);
}
*/
float Distanta(Point &A, Point &B)
{
	return ((A.x - B.x)*(A.x - B.x)  + (A.y - B.y)*(A.y - B.y));
}

bool Egal(float d1, float d2)
{
	return (fabs(d1 - d2) <= EPSILON);
}

bool IsEch(int i , int j ,int k)
{
	return ( Egal(Dist[i][j],Dist[i][k]) && Egal(Dist[i][j],Dist[j][k]));
}

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

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

	for (int i = 0 ;i  < n - 1  ; i ++)
		for (int j = i + 1 ; j < n ; j ++)
			Dist[i][j] = Distanta(Points[i],Points[j]);



	int counter = 0 ;
	for (int i = 0 ; i < n - 2 ; i++)
		for (int j = i + 1  ; j < n - 1 ; j++)
			for (int k = j + 1 ; k < n ; k++)
				if (IsEch(i,j,k))
					counter++;


	printf("%d\n",counter);
	
	return 0;
}