Cod sursa(job #1053710)

Utilizator Robert29FMI Tilica Robert Robert29 Data 12 decembrie 2013 21:54:20
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.35 kb
#include<stdio.h>
#include<algorithm>
#define er 0.0001
using namespace std;
FILE*f = fopen("patrate3.in", "r");
FILE*g = fopen("patrate3.out", "w");
int n;
double abs1(double a)
{
	if (a<0)
		return -a;
	return a;
}
struct punct
{
	double x, y;
} v[1001], p1, p2;
int cmp(punct a, punct b)
{
	if (abs1(a.x - b.x)<er)
		return a.y<b.y;
	return a.x<b.x;
}
int cautbin(punct x)
{
	int p = 1;
	int u = n;
	int m;
	while (p <= u)
	{
		m = (p + u) / 2;
		if (cmp(x, v[m]))
			u = m - 1;
		else
			p = m + 1;
		if (abs1(v[m].x - x.x)<er&&abs1(v[m].y - x.y)<er)
			return 1;
	}


	return 0;
}
int main()
{

	fscanf(f, "%d", &n);
	for (int i = 1; i <= n; ++i)
		fscanf(f, "%lf%lf", &v[i].x, &v[i].y);

	sort(v + 1, v + n + 1, cmp);
	int nr = 0;
	for (int i = 1; i<n; ++i)
	for (int j = i + 1; j <= n; ++j)
	{
		double mijx, mijy, dx, dy, x1, x2, y1, y2;
		mijx = (v[i].x + v[j].x) / 2;
		mijy = (v[i].y + v[j].y) / 2;
		dx = abs1(mijx - v[i].x);
		dy = abs1(mijy - v[i].y);
		p1.y = mijy - dx;
		p2.y = mijy + dx;
		if (v[i].y<v[j].y)
		{
			p1.x = mijx + dy;
			p2.x = mijx - dy;

			if (cautbin(p1) && cautbin(p2))
				++nr;
		}
		else
		{
			p1.x = mijx - dy;
			p2.x = mijx + dy;

			if (cautbin(p1) && cautbin(p2))
				++nr;
		}
	}

	fprintf(g, "%d", nr / 2);

	fclose(f);
	fclose(g);
	return 0;
}