Cod sursa(job #687074)

Utilizator mihaibogdan10Mihai Bogdan mihaibogdan10 Data 22 februarie 2012 02:30:37
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;

struct per{double x, y;};
vector <per> v;

bool Comp(per a, per b){
	if (fabs(a.x - b.x) < 0.0001) return a.y < b.y;
	return a.x < b.x;
}

bool Is(double x, double y){
	int st = 0, dr = v.size()-1, m;
	
	while (st <= dr){
		m = (st + dr) / 2;
		if (fabs(v[m].x - x) < 0.0001 && fabs(v[m].y - y) < 0.0001) return true;
		if (Comp(v[m], (per){x, y})) st = m + 1;
		else dr = m - 1;
	}
	return false;
}

int main(void){
	int n, i, j, N;
	double x, y, x1, x2, y1, y2;
	freopen("patrate3.in", "r", stdin), freopen("patrate3.out", "w", stdout);
	scanf ("%d", &n);
	
	for (i = 0; i < n; i++){
		scanf("%lf %lf", &x, &y);
		v.push_back((per) {x, y});
	}
	
	sort(v.begin(), v.end(), Comp);
	for (i = 0, N = 0; i < n; i++)
		for (j = i+1; j < n; j++)
			if (i != j){
				x1 = v[i].x + v[i].y - v[j].y;
				y1 = v[i].y - v[i].x + v[j].x;
				x2 = v[j].x - v[j].y + v[i].y;
				y2 = v[j].x + v[j].y - v[i].x;
				if 	(Is(x1, y1) && Is(x2, y2)) N++;
			}
	
	printf("%d", N / 2);
}