Cod sursa(job #1017167)

Utilizator miu_mik93FMI - Paduraru Miruna miu_mik93 Data 27 octombrie 2013 13:27:29
Problema Trapez Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <stdio.h>
#include <math.h>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <assert.h>
#include <time.h>
#include <algorithm>
#include <vector>
using namespace std;
#define EPS 0.000000000001
#define NMax 1001
double INFINIT =  1.0 * (1 << 30);
using namespace std;

struct punct
{
	int x, y;
};
int compare(const void *a, const void *b)
{
	return (*(double*)a - *(double*)b);
}
double calculezPanta (punct A, punct B)
{
	if (A.x == B.x)
	{
		return INFINIT;
	}
	else
		return 1.0 * ((1.0 * (A.y - B.y)) / (1.0 * (A.x - B.x)));
}
int main()
{
	int n; punct p[NMax];
	FILE *f = fopen("trapez.in", "r");
	FILE *g = fopen("trapez.out", "w");
	fscanf(f, "%d", &n);
	for (int i = 0; i < n; i++)
	{
		fscanf(f, "%d %d", &p[i].x, &p[i].y);
	}
	double pante[NMax*NMax]; int k = 0;
	for (int i = 0; i < n-1; i++)
	{
		for (int j = i+1; j < n; j++)
		{
			pante[k++] = calculezPanta (p[i], p[j]);
		}
	}
	sort( pante, pante + k );
	//qsort(pante, k, sizeof(double), compare);
	int nr = 1, nrTrapeze = 0;
	for (int i = 0; i < k; i++)
	{
		if (pante[i+1] == pante[i] && pante[i] != INFINIT)
			nr++;
		else
		{
			nrTrapeze += nr * (nr - 1) / 2;
			nr = 1;
		}
	}
	fprintf(g, "%d", nrTrapeze);
	fclose(f); fclose(g);
	return 0;
}