Cod sursa(job #1059801)

Utilizator GaborGabrielFMI - GabrielG GaborGabriel Data 16 decembrie 2013 23:06:34
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>
#include <algorithm>
using namespace std;

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

#define MAXN 1005

struct point
{
	double x, y;
}points[MAXN], a0, a1;

int N;

int Compare(double a, double b)
{
	if (fabs(a - b) <= 0.00001)
		return 1;
	return 0;
}
int Equal(point a, point b)
{
	return (Compare(a.x, b.x) && Compare(a.y, b.y));
}
int ComparePoints(point a, point b)
{
	if (Compare(a.x, b.x))
		return (a.y < b.y);
	return (a.x< b.x);
}
int sortCompare(point a, point b)
{
	if (Compare(a.x, b.x))
		return (a.y < b.y);
	return (a.x < b.x);
}
int SearchB(point x)
{
	int left = 1, right = N, middle;
	while (left <= right)
	{
		middle = (left + right) / 2;
		if (Equal(points[middle], x))
			return 1;

		if (ComparePoints(points[middle], x))
			left = middle + 1;
		else
			right = middle - 1;
	}
	return 0;
}
int main()
{
	int i, j, sol=0;
	double a, b;

	f >> N;
	for (i = 1; i <= N; ++i)
	{
		f >> a >> b;
		points[i].x = a;
		points[i].y = b;
	}

	sort(points + 1, points + N + 1, sortCompare);

	for (i = 1; i <= N; ++i)
	for (j = i + 1; j <= N; ++j)
	{ // Thanks CD
		a0.x = points[i].x + points[i].y - points[j].y;
		a0.y = points[i].y + points[j].x - points[i].x;

		a1.x = points[j].x + points[i].y - points[j].y;
		a1.y = points[j].y + points[j].x - points[i].x;

		if (SearchB(a1) && SearchB(a0))
			++sol;
	}

	g << sol/2;

	return 0;
}