Pagini recente » Cod sursa (job #551768) | Cod sursa (job #1500946) | Cod sursa (job #1323396) | Cod sursa (job #730070) | Cod sursa (job #2215139)
#include <fstream>
#include <algorithm>
#include <cmath>
#define x first
#define y second
using namespace std;
ifstream cin ("patrate3.in");
ofstream cout ("patrate3.out");
const int NMAX = 1000;
const double EPS = 1e-8;
typedef pair <long double, long double> Point;
int n;
int squares;
Point v[1 + NMAX];
bool egale(long double a, long double b) {
return (abs(a - b) < EPS);
}
bool find(Point p) {
int st = 1, dr = n, mid;
while(st <= dr) {
mid = (st + dr) / 2;
if(egale(v[mid].x, p.x) && egale(v[mid].y, p.y))
return 1;
if(egale(v[mid].x, p.x)) {
if(v[mid].y < p.y)
st = mid + 1;
else
dr = mid - 1;
} else {
if(v[mid].x < p.x)
st = mid + 1;
else
dr = mid - 1;
}
}
return 0;
}
int main() {
cin >> n;
for(int i = 1; i <= n; i++)
cin >> v[i].x >> v[i].y;
sort(v + 1, v + n + 1);
for(int i = 1; i < n; i++) {
for(int j = i + 1; j <= n; j++) {
Point Mid, A, B; // Mid este mijlocul patratului
Mid = {(v[i].x + v[j].x) / 2, (v[i].y + v[j].y) / 2};
A = {Mid.x - (v[j].y - Mid.y), Mid.y + (v[j].x - Mid.x)};
B = {Mid.x + (v[j].y - Mid.y), Mid.y - (v[j].x - Mid.x)};
if(find(A) && find(B))
squares++;
}
}
squares /= 2;
cout << squares;
return 0;
}