Cod sursa(job #146518)
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define maxn 1024
#define epsilon 0.00000000001
long x[maxn], y[maxn];
long double v[maxn * maxn];
int cmp(const void *a, const void *b) {
if ((*(long double *)a - *(long double *) b) > 0) {
return 1;
}
return -1;
}
long double panta(long a, long b) {
long xx, yy;
xx = y[b] - y[a];
yy = x[a] - x[b];
if (yy == 0) return 723.35;
return (long double) xx / yy;
}
long aprox(long double a, long double b) {
if (a >= b && a - b < epsilon || b >= a && b - a < epsilon)
return 1;
return 0;
}
int main() {
freopen("trapez.in","rt",stdin);
freopen("trapez.out","wt",stdout);
long n, s = 0, i, j, nr = 0, m;
scanf("%ld", &n);
for(i = 1;i <= n; ++i) {
scanf("%ld %ld", &x[i], &y[i]);
}
for(i = 1;i <= n; ++i)
for(j = i + 1;j <= n;++j)
v[++nr] = panta(i, j);
qsort(v + 1, nr, sizeof(v[0]), cmp);
v[0]= - 4354;
m = 1;
for(i = 1;i <= nr; ++i) {
if (aprox(v[i], v[i - 1])) {
++m;
}
else {
s += m * (m - 1) / 2;
m = 1;
}
}
printf("%ld\n", s);
return 0;
}