Cod sursa(job #2935641)

Utilizator matthriscuMatt . matthriscu Data 7 noiembrie 2022 10:53:50
Problema Trapez Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;

#define NMAX 1005

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<long long, int> m;
	for (int i = 0; i < n; ++i)
		for (int j = i + 1; j < n; ++j) {
			pair<int, int> temp = slope(points[i], points[j]);
			++m[*(long long *)&temp];
		}

	int ans = 0;
	for(auto& [_, i] : m)
		ans += (i * (i - 1)) / 2;

	fout << ans << '\n';
}