Cod sursa(job #2892626)

Utilizator moltComan Calin molt Data 22 aprilie 2022 21:45:07
Problema Triang Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream in("triang.in");
ofstream out("triang.out");

const double EPS = 0.0001;

struct point {
    double x;
    double y;
};

int n;
vector<point> points;
vector<double> distances;

double get_distance(point p1, point p2) {
    double diff_x = p2.x - p1.x;
    double diff_y = p2.y - p1.y;
    return diff_x * diff_x + diff_y * diff_y;
}

bool is_equal(double dist1, double dist2) {
    return (abs(dist1 - dist2) < EPS);
}

int main()
{
    in >> n;
    point p;
    in >> p.x >> p.y;
    points.push_back(p);
    for (int k = 1; k < n; ++k) {
        in >> p.x >> p.y;
        for (int i = 0; i < points.size(); ++i) {
            distances.push_back(get_distance(points[i], p));
        }
        points.push_back(p);
    }
    sort(distances.begin(), distances.end());

    int i = 0;
    long long res = 0;
    int n = distances.size();
    while (i < n) {
        int j = i + 1;
        while (j < n && is_equal(distances[i], distances[j])) {
            ++j;
        }
        if (j - i >= 3) {
            int len = j - i;
            res += 1LL * (1LL * len * 1LL * (len - 1) * 1LL * (len - 2)) / (1LL * 6);
        }
        i = j;
    }

    out << res;
}