Pagini recente » Cod sursa (job #2522865) | Cod sursa (job #734509) | Cod sursa (job #1262160) | Cod sursa (job #826271) | Cod sursa (job #327591)
Cod sursa(job #327591)
#include <stdio.h>
#define dim 1001
#define dim2 dim*(dim-1)/2
int n, x[dim], y[dim], nr[dim2], num[dim2], ct=0, fol[dim2];
void q_sort(int l, int r) {
int i=l, j=r, x=(i+j)/2, h;
do {
while (nr[i]*num[x]<nr[x]*num[i]) ++i;
while (nr[x]*num[j]<nr[j]*num[x]) --j;
if (i<=j) {
h=nr[i], nr[i]=nr[j], nr[j]=h;
h=num[i], num[i]=num[j], num[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, nr1=0, nr2=0, tmp;
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) {
++ct;
nr[ct]=y[j]-y[i];
num[ct]=x[j]-x[i];
if (!nr[ct]) nr1++, ct--;
if (!num[ct]) nr2++, ct--;
}
q_sort(1, ct);
sol=nr1*(nr1-1)/2+nr2*(nr2-1)/2;
tmp=1;
for (i=2; i<=ct; ++i)
if (nr[i-1]*num[i]==nr[i]*num[i-1]) tmp++;
else {
sol+=tmp*(tmp-1)/2;
tmp=1;
}
printf("%d\n", sol);
return 0;
}