Cod sursa(job #2935620)

Utilizator matthriscuMatt . matthriscu Data 7 noiembrie 2022 10:18:57
Problema Trapez Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 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;

	map<pair<int, int>, int> 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';
}