Pagini recente » Cod sursa (job #1845934) | Cod sursa (job #3229875) | infoarena - te ajutam sa devii olimpic! | Cod sursa (job #2917528) | Cod sursa (job #2735511)
#include <bits/stdc++.h>
using namespace std;
int main() {
freopen("patrate3.in", "r", stdin);
freopen("patrate3.out", "w", stdout);
int n;
scanf("%d", &n);
vector<pair<int, int>> p(n);
auto get = []() {
int x = 0, y = 0;
scanf("%d.%d", &x, &y);
bool sign = x >= 0;
return (sign ? 1 : -1) * (abs(x) * 10000 + y);
};
for (int i = 0; i < n; ++i) {
p[i].first = get();
p[i].second = get();
}
using ii = pair<int, int>;
vector<pair<ii, ii>> v;
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
int x = p[i].first + p[j].first;
int y = p[i].second + p[j].second;
int vx = p[i].first - p[j].first;
int vy = p[i].second - p[j].second;
if (vx < 0 || (vx == 0 && vy < 0)) {
vx = -vx;
vy = -vy;
}
int g = __gcd(abs(vx), abs(vy));
vx /= g;
vy /= g;
int tvx = -vy;
int tvy = vx;
if (tvx < 0 || (tvx == 0 && tvy < 0)) {
tvx = -tvx;
tvy = -tvy;
}
v.push_back({{x, y}, {vx, vy}});
v.push_back({{x, y}, {tvx, tvy}});
}
}
sort(v.begin(), v.end());
long long ans = 0;
for (int i = 0; i < v.size();) {
int j = i;
while (j < v.size() && v[i] == v[j]) j++;
ans += (j - i) *1ll* (j - i - 1) / 2;
i = j;
}
printf("%lld\n", ans / 2);
return 0;
}