Cod sursa(job #612598)

Utilizator luckyme91wiz kid luckyme91 Data 8 septembrie 2011 22:07:21
Problema Trapez Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 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 + 1))) - (**(double**)b * (*(*(double**)a + 1))) );
}

int main () {

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

int n, k, i, j, l, count;
double crd [1000][2], p, q;
double **panta = (double**)calloc (1000000, sizeof(double*)), oy[10000];
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 (3, sizeof (double));
			panta[k][0] = crd[j][1] - crd[i][1];
			panta[k][1] = crd[j][0] - crd[i][0];
			panta[k][2] = 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];
	q = panta[i][1];
	j = i + 1;
	while (j < k && p * panta[j][1] == q * panta[j][0])
	{
		count ++;
		if (panta[i][2] == panta[j][2])
			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;
}