Pagini recente » Cod sursa (job #1376301) | Cod sursa (job #1273096) | Cod sursa (job #2911934) | Cod sursa (job #249988) | Cod sursa (job #315684)
Cod sursa(job #315684)
#include<stdio.h>
#include<stdlib.h>
struct im{long x,y;}p[1000005];
long n,i,j,a[1005],b[1005],lp,x,sum;
long partit(im a[],long st,long dr)
{long i,j,m;
im piv,aa;
m=(st+dr)/2;
piv=a[m];
i=st-1;
j=dr+1;
while(1)
{do{++i;} while(a[i].x*piv.y<piv.x*a[i].y);
do{--j;} while(a[j].x*piv.y>piv.x*a[j].y);
if (i<j)
{aa=a[i];a[i]=a[j];a[j]=aa;}
else
return j;
}
}
void quicks(im a[],long st,long dr)
{long p;
if (st<dr)
{p=partit(a,st,dr);
quicks(a,st,p);
quicks(a,p+1,dr);
}
}
int main()
{
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;++i)
{scanf("%ld%ld",&a[i],&b[i]);
for(j=1;j<i;++j){p[++lp].x=abs(a[i]-a[j]);p[lp].y=abs(b[i]-b[j]);}}
quicks(p,1,lp);
x=1;
for(i=2;i<=lp;++i)
if(p[i-1].x*p[i].y==p[i].x*p[i-1].y)
x++;
else{sum+=((x*(x-1))/2);x=1;}
printf("%ld\n",sum);
return 0;
}