Pagini recente » Cod sursa (job #350560) | Cod sursa (job #468154) | Cod sursa (job #2627973) | Cod sursa (job #537061) | Cod sursa (job #2693358)
#include <bits/stdc++.h>
using namespace std;
#define x1 "patrate3.in"
#define x2 "patrate3.out"
ifstream in(x1);
ofstream out(x2);
#define MAX_N 1024
#define dif 0.00001
int n;
struct point {
double x, y;
} v[MAX_N], a, b;
bool cmp(point a, point b) {
if(abs(a.x - b.x) < dif)
return a.y < b.y || abs(a.y - b.y) < dif;
return a.x < b.x;
}
int cautbin(point x) {
int r, pas;
pas = MAX_N;
r = 0;
while(pas) {
if(r + pas <= n && cmp(v[r + pas], x)) {
r += pas;
}
pas /= 2;
}
return (abs(v[r].x - x.x) < dif && abs(v[r].y - x.y) < dif);
}
int main() {
int i, j, ans = 0;
in >> n;
for(i = 1; i <= n; i++)
in >> v[i].x >> v[i].y;
sort(v + 1, v + n + 1, cmp);
for(i = 1; i < n; i++) {
for(j = i + 1; j <= n; j++) {
a.x = v[i].x + v[i].y - v[j].y;
a.y = v[i].y + v[j].x - v[i].x;
b.x = v[j].x + v[i].y - v[j].y;
b.y = v[j].y + v[j].x - v[i].x;
ans += (cautbin(a) == 1 && cautbin(b) == 1);
}
}
out << ans / 2;
return 0;
}