Pagini recente » Cod sursa (job #2262683) | Cod sursa (job #1114165) | Cod sursa (job #263928) | Cod sursa (job #2959139) | Cod sursa (job #63061)
Cod sursa(job #63061)
#include <stdio.h>
#include <math.h>
#define MAXN 1000
int n, k;
long long alfa;
struct U {long long x, y;} P[MAXN], s[MAXN*(MAXN-1)/2];
void quick (U x[], int st, int dr)
{
int i, ii, j, jj, aux2, t1, t2;
U aux;
i=st; j=dr;
ii=0; jj=-1;
if (st<dr)
{ while (i<j)
{
if (x[i].x*x[j].y-x[j].x*x[i].y > 0) t1=1;
else t1=-1;
if (x[i].y*x[j].y>0) t2=1; else t2=-1;
if (t1*t2>0)
{ aux=x[i]; x[i]=x[j]; x[j]=aux;
aux2=-ii; ii=-jj; jj=aux2;
}
i=i+ii;
j=j+jj;
}
quick(x, st, i-1);
quick(x, i+1, dr);
}
}
void read()
{
int i;
freopen ("trapez.in", "r", stdin);
scanf ("%d", &n);
for (i=0; i<n; ++i)
scanf("%lld %lld", &P[i].x, &P[i].y);
fclose(stdin);
}
void slope()
{
int i, j;
for (i=0; i<n; ++i)
for (j=i+1; j<n; ++j)
{
if (P[i].x==P[j].x)
alfa++;
else s[k].x = (P[i].y-P[j].y), s[k++].y=(P[i].x-P[j].x);
}
}
int main()
{
int i;
long long nr=0, a, b, v;
read();
slope();
quick(s, 0, k-1);
for (i=0; i<k; )
{
a=s[i].x; b=s[i].y;
v=1;
i++;
while (i<k && (a*s[i].y==b*s[i].x)) v++, i++;
nr+= (v*(v-1))/2;
}
nr+=(alfa*(alfa-1))/2;
freopen ("trapez.out", "w", stdout);
printf ("%lld\n", nr);
fclose(stdout);
return 0;
}