Cod sursa(job #1018345)

Utilizator tuzi92Tuzes-Katai Tamas tuzi92 Data 29 octombrie 2013 13:41:43
Problema Trapez Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#include <cstdlib>
#include <map>
using namespace std;

#define fr(i, a, b) for(int i=a; i<b; ++i)

int n, k = -1, nn;
long long int x[10000];
long long int y[10000];
map<float, int> m = map<float, int>();
map<float, int>::iterator it = map<float, int>::iterator();
long long int ossz;

inline int factorial(int x) {
  return (x == 1 ? x : x * factorial(x - 1));
}

int main()
{
	freopen("trapez.in", "r", stdin);
	freopen("trapez.out", "w", stdout);

	scanf("%d", &n);
	nn = n*(n-1)/2;
	fr(i, 0, n) scanf("%lld%lld", x+i, y+i);
	fr(i, 0, n) fr(j, i+1, n) m[(float)(x[i]-x[j])/(y[i]-y[j])]++; 
	for (it=m.begin(); it!=m.end(); ++it)
	{
		if (it->second>1)
		{
			if (it->second==2) ossz+=1;
			else ossz += (it->second*(it->second))/(2*factorial(it->second-2));
		}
	}

	printf("%lld", ossz);
	return 0;
}