Cod sursa(job #1769632)

Utilizator cristina_borzaCristina Borza cristina_borza Data 2 octombrie 2016 21:22:11
Problema Patrate 3 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <algorithm>
#include <fstream>
#include <set>

#define se second
#define fi first

#define DIM 10000

using namespace std;

ifstream f ("patrate3.in");
ofstream g ("patrate3.out");

int n , ans;

double x , y;

pair <double , double> v[DIM];

bool cbin (pair <double , double> x) {
    int i , p = 0;
    for (i = 1; i <= n; i <<= 1);
    while (i) {
        if (i + p <= n && (v[i + p].fi < x.fi || (v[i + p].fi == x.fi && v[i + p].se <= x.se))) {
            p += i;
        }

        i >>= 1;
    }

    if (v[p] == x) {
        return true;
    }

    return false;
}

int main() {
    f >> n;
    for (int i = 1; i <= n; ++i) {
        f >> x >> y;

        v[i].fi = round(x * 10000);
        v[i].se = round(y * 10000);
    }

    sort (v + 1 , v + n + 1);
    for (int i = 1; i <= n; ++i) {
        for (int j = i + 1; j <= n; ++j) {
            pair <double , double> p1 , p2;

            p1.fi = v[i].fi + v[i].se - v[j].se;
            p1.se = v[i].se + v[j].fi - v[i].fi;
            p2.fi = v[j].fi + v[i].se - v[j].se;
            p2.se = v[j].se + v[j].fi - v[i].fi;

            int ok = cbin (p1);
            if (!ok) {
                continue;
            }

            ok = cbin (p2);
            if (ok) {
                ++ans;
            }
        }
    }

    g << ans / 2;
    return 0;
}