Cod sursa(job #2693358)

Utilizator danibaciuBaciu Daniel Mihai danibaciu Data 5 ianuarie 2021 17:03:10
Problema Patrate 3 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#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;
}