Pagini recente » Cod sursa (job #840065) | Cod sursa (job #2892622)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("triang.in");
ofstream out("triang.out");
const double EPS = double(1e-3);
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;
}