Pagini recente » Cod sursa (job #588800) | Cod sursa (job #1621361) | Cod sursa (job #4482) | Cod sursa (job #2759643) | Cod sursa (job #184838)
Cod sursa(job #184838)
#include<stdio.h>
#define M 500000
long long sol[M][2],x[1001],y[1001],j,i,nr,q,ss,suma;
int n;
void qsort(long long l,long long r)
{long long i,j,x1,x2,y;
i=l;j=r;x1=sol[(l+r)/2][0];x2=sol[(l+r)/2][1];
do
{
while ((long long)sol[i][0]*x2<(long long)sol[i][1]*x1)
i++;
while ((long long)sol[j][0]*x2>(long long)sol[j][1]*x1)
j--;
if (i<=j)
{
y=sol[i][0];sol[i][0]=sol[j][0];sol[j][0]=y;
y=sol[i][1];sol[i][1]=sol[j][1];sol[j][1]=y;
i++;j--;
}
}
while (i<=j);
if (l<j) qsort(l,j);
if (i<r) qsort(i,r);
}
void bsort()
{long long y;
for (i=1;i<q;i++)
for (j=i+1;j<=q;j++)
if ((long long)sol[i][0]*sol[j][1]>(long long)sol[i][1]*sol[j][0])
{
y=sol[i][0];sol[i][0]=sol[j][0];sol[j][0]=y;
y=sol[i][1];sol[i][1]=sol[j][1];sol[j][1]=y;
}
}
int main()
{
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%lld %lld",&x[i],&y[i]);
for(j=1;j<i;j++)
{
q++;
sol[q][0]=y[i]-y[j];
sol[q][1]=x[i]-x[j];
if (sol[q][1]<0)
{
sol[q][1]=-sol[q][1];
sol[q][0]=-sol[q][0];
}
if (sol[q][1]==0)
if (sol[q][0]<0)sol[q][0]=-sol[q][0];
if (sol[q][0]==0)
if (sol[q][1]<0)sol[q][1]=-sol[q][1];
}
}
qsort(1,q);
/*bsort();*/
for(i=1;i<q;i++)
{
j=i;
while (sol[j][0]*sol[j+1][1]==sol[j][1]*sol[j+1][0] && j<q)
j++;
ss=j-i+1;
suma+=ss*(ss-1)/2;
i=j;
}
printf("%lld\n",suma);
return 0;
}