Cod sursa(job #612526)

Utilizator luckyme91wiz kid luckyme91 Data 8 septembrie 2011 16:36:58
Problema Trapez Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 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[100000][4], oy[1000][3];
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][0] = i;
			oy[l][1] = j;
			oy[l][2] = pow((crd[j][0] - crd[i][0]), 2) +  pow((crd[j][1] - crd[i][1]), 2);

			l++;
		}
		else
		{
			panta[k][0] = (double)((crd[j][1] - crd[i][1])/(crd[j][0] - crd[i][0]));
			panta[k][1] = i;
			panta[k][2] = j;
			panta[k][3] = 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][3] == panta[j][3])
			count++;
		j++;
	}

}
for (i = 0; i < l - 1; i++)
{
	p = oy[i][0];
	j = i + 1;
	while (p == oy[j][0])
	{
		count ++;
		if (oy[i][3] == oy[j][3])
			count++;
		j++;
	}
}
out << count;
return 0;
}