Pagini recente » Cod sursa (job #1979783) | Monitorul de evaluare | Cod sursa (job #1996251) | Cod sursa (job #270368) | Cod sursa (job #2935621)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 1005
struct pair_hash
{
template <class T1, class T2>
std::size_t operator() (const std::pair<T1, T2> &pair) const {
return std::hash<T1>()(pair.first) ^ std::hash<T2>()(pair.second);
}
};
pair<int, int> slope(pair<int, int>& a, pair<int, int>& b) {
int dy = a.second - b.second, dx = a.first - b.first;
if (dx == 0)
return {0, 1};
if (dy == 0)
return {1, 0};
if ((dx < 0) + (dy < 0) == 1)
dy = -abs(dy);
else
dy = abs(dy);
dx = abs(dx);
int gcd = __gcd(dx, dy);
return {dx / gcd, dy / gcd};
}
int main() {
ifstream fin("trapez.in");
ofstream fout("trapez.out");
int n;
fin >> n;
vector<pair<int, int>> points(n);
for (int i = 0; i < n; ++i)
fin >> points[i].first >> points[i].second;
unordered_map<pair<int, int>, int, pair_hash> m;
for (int i = 0; i < n; ++i)
for (int j = i + 1; j < n; ++j)
++m[slope(points[i], points[j])];
int ans = 0;
for(auto& [_, i] : m)
ans += (i * (i - 1)) / 2;
fout << ans << '\n';
}