Cod sursa(job #2535761)

Utilizator david.teacaDavid Stefan Teaca david.teaca Data 1 februarie 2020 11:12:55
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <bits/stdc++.h>
	
using namespace std;
	
typedef long long ll;
	
const int N = 1100;
	
const double eps = 1e-5;
	
ifstream in("patrate3.in");
	
ofstream out("patrate3.out");
	
struct point {
	
	double x, y;
	
	bool operator < (const point& other) const {
	
		return (abs(x - other.x) < eps ? y < other.y - eps : x < other.x - eps);
	
	}
	
};
	
 
	
point pts[N];
	
set < point > s;
	
bool check(int a, int b) {
	
	double xm = (pts[a].x + pts[b].x) / 2;
	
	double ym = (pts[a].y + pts[b].y) / 2;
	
	double delta_y = abs(ym - pts[a].y);
	
	double delta_x = abs(xm - pts[a].x);
	
	if (pts[a].y < pts[b].y) {
	
		delta_x = -delta_x;
	
	}
	
	point new_x, new_y;
	
	new_x.x = xm - delta_y;
	
	new_x.y = ym - delta_x;
	
	new_y.x = xm + delta_y;
	
	new_y.y = ym + delta_x;
	
	if (s.find(new_x) != s.end() && s.find(new_y) != s.end()) {
	
		return true;
	
	}
	
	return false;
	
}
	
int main() {
	
	int n, ans = 0;
	
	in >> n;
	
	for (int i = 1; i <= n; i++) {
	
		in >> pts[i].x >> pts[i].y;
	
		s.insert(pts[i]);
	
	}
	
	sort(pts + 1, pts + 1 + n);
	
	for (int i = 1; i <= n; i++) {
	
		for (int j = i + 1; j <= n; j++) {
	
			ans += check(i, j);
	
		}
	
	}
	
	out << ans / 2;
	
	return 0;
	
}