Cod sursa(job #681723)

Utilizator milijrCristian Militaru milijr Data 17 februarie 2012 17:59:11
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;

//m ( x2 - x1 ) = y2 - y1
//m = 

class fractie
{
public:
	fractie(): numar(0), numi(0) {}
	fractie(int numarS, int numiS): numar(numarS), numi(numiS){}
	bool operator<(fractie f2) const
	{
		return (f2.numi * numar < f2.numar * numi); 
	}
	bool operator==(fractie f2)
	{
		return (f2.numi * numar == f2.numar * numi);
	}
	int numar,numi;
};

#define MAXN 105

int main()
{
	FILE *in  = fopen("trapez.in",  "r");
	FILE *out = fopen("trapez.out", "w");
	
	int i, j, n, x[MAXN], y[MAXN], npante = 0;
	fractie pante[MAXN * MAXN + 100];
	
	fscanf(in, "%i", &n);
	for(i = 1; i <= n; i++)
	{
		fscanf(in, "%i %i", &x[i], &y[i]);
		for(j = 1; j < i; j++)
		{
			if(x[i] != x[j])
				pante[++npante] = fractie(y[j] - y[i], x[j] - x[i]);
		}
	}
	sort(pante + 1, pante + npante + 1);
	
	int nraux = 0, nrFinal = 0;
	pante[0] = fractie(-1, -1);
	for(i = 1; i < npante; i++)
	{
		nraux = 1;
		while(pante[i + 1] == pante[i])
		{
			i++;
			nraux++;
		}
		nrFinal += nraux * (nraux - 1) / 2;
	}
	nrFinal += nraux * (nraux - 1) / 2;
	
	fprintf(out, "%i", nrFinal);
}