Cod sursa(job #1774414)

Utilizator ArkinyStoica Alex Arkiny Data 8 octombrie 2016 22:09:01
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<fstream>
#include<math.h>
#include<map>
using namespace std;

ifstream in("trapez.in");

ofstream out("trapez.out");


map<pair<long long, long long>, long long> mp;

typedef pair<long long, long long> POINT2D;

POINT2D points[1010];

int N;

long long Abs(long long x)
{
	return (x > 0) ? x : -x;
}

long long cmmdc(long long a, long long b)
{
	while (b)
	{
		long long r = a%b;
		a = b;
		b = r;
	}
	return a;
}

int main()
{

	in >> N;

	for (int i = 1;i <= N;++i)
		in >> points[i].first >> points[i].second;

	for (int i = 1;i <= N;++i)
	{
		for (int j = i+1;j <= N;++j)
		{
			if (points[i].first - points[j].first == 0)
				mp[make_pair(1LL << 63, 1LL << 63)]++;
			else if (points[i].second - points[j].second == 0)
				mp[make_pair(0, 0)]++;
			else
			{
				long long v_y = points[i].second - points[j].second, v_x = points[i].first - points[j].first;
				long long cm = cmmdc(Abs(v_y), Abs(v_x));

				mp[make_pair(v_y / cm, v_x / cm)]++;
			}
		}
	}
	long long rez = 0;
	for (auto i = mp.begin();i != mp.end();++i)
	{
		rez += (*i).second*((*i).second - 1) / 2;
	}
	
	out << rez;

	return 0;
}