Cod sursa(job #327594)

Utilizator cotofanaCotofana Cristian cotofana Data 29 iunie 2009 15:50:23
Problema Trapez Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>
#define dim 1001
#define dim2 dim*(dim-1)/2

int n, x[dim], y[dim], ct=0;
long double p[dim2];

void q_sort(int l, int r) {
	int i=l, j=r, x=(i+j)/2;
	double h;
	do {
		while (p[i]<p[x]) ++i;
		while (p[x]<p[j]) --j;
		if (i<=j) {
			h=p[i], p[i]=p[j], p[j]=h;
			++i, --j;
		}
	} while (i<=j);
	if (i<r) q_sort(i, r);
	if (l<j) q_sort(l, j);
}

int main() {
	int i, j, sol, tmp=0;
	freopen("trapez.in", "r", stdin);
	freopen("trapez.out", "w", stdout);
	scanf("%d\n", &n);
	for (i=1; i<=n; ++i) scanf("%d %d\n", &x[i], &y[i]);
	for (i=1; i<n; ++i)
		for (j=i+1; j<=n; ++j)
			if (x[j]==x[i]) tmp++;
			else {
				++ct;
				p[ct]=((double)y[j]-y[i])/(x[j]-x[i]);
			}
		
	q_sort(1, ct);
	
	sol=tmp*(tmp-1)/2;
	tmp=1;
	for (i=2; i<=ct; ++i)
		if (p[i-1]==p[i]) tmp++;
		else {
			sol+=tmp*(tmp-1)/2;
			tmp=1;
		}
	
	printf("%d\n", sol);
	return 0;
}