Cod sursa(job #612528)

Utilizator luckyme91wiz kid luckyme91 Data 8 septembrie 2011 16:58:15
Problema Trapez Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <fstream>
#include <stdlib.h>
#include <math.h>
using namespace std;
int compare (const void *a, const void *b)
{
	return ( **(double**)a - **(double**)b < 0);
}

int main () {

ifstream in ("trapez.in");
ofstream out ("trapez.out");

int n, k, i, j, l, count;
double crd [1000][2], p;
double **panta = (double**)calloc (1000000, sizeof(double*)), oy[1000];
in >> n;
for (i = 0; i < n; i++)
	in >> crd[i][0] >> crd[i][1];
k = 0, l = 0;
for (i = 0; i < n - 1; i++)
	for (j = i + 1; j < n; j++)
	{
		if (crd[j][0] == crd[i][0])
		{
			oy[l] = pow((crd[j][0] - crd[i][0]), 2) +  pow((crd[j][1] - crd[i][1]), 2);
			l++;
		}
		else
		{
			panta[k] = (double*) calloc (2, sizeof (double));
			panta[k][0] = (double)((crd[j][1] - crd[i][1])/(crd[j][0] - crd[i][0]));
			panta[k][1] = pow((crd[j][0] - crd[i][0]), 2) +  pow((crd[j][1] - crd[i][1]), 2);

			k++;
		}
	}
qsort (panta, k, sizeof(panta[0]), compare);
count = 0;
for (i = 0; i < k - 1; i++)
{
	p = panta[i][0];
	j = i + 1;
	while (p == panta[j][0])
	{
		count ++;
		if (panta[i][1] == panta[j][1])
			count++;
		j++;
	}

}
for (i = 0; i < l - 1; i++)
	for (j = i + 1; j < l; j++)
		if (oy[i] == oy[j])
			count += 2;
		else
			count ++;
out << count;
return 0;
}