Pagini recente » Cod sursa (job #1925640) | Cod sursa (job #1765076) | Cod sursa (job #1531184) | Cod sursa (job #2009374) | Cod sursa (job #455866)
Cod sursa(job #455866)
#include<stdio.h>
#include<math.h>
#define eps 0.00000000000001
#define INF 2000000100.0
struct trapez
{
long x,y;
};
trapez t[1011];
double p[500010];
long vertical (trapez a , trapez b)
{
return (a.x==b.x);
}
double panta (trapez a , trapez b)
{
if (vertical (a,b)==1)
return INF;
return ((double)b.y-a.y)/(b.x-a.x);
}
long part (long st , long dr)
{
long i,j,m;
double piv,aux;
m=(st+dr)/2;
piv=p[m];
i=st-1;
j=dr+1;
while (1)
{
do {++i;}while (!fabs(p[i]-piv)<eps && p[i]-piv<=-eps);
do {--j;}while (!fabs(p[i]-piv)<eps && p[j]-piv>=eps);
if (i<j)
{
aux=p[i];
p[i]=p[j];
p[j]=aux;
}
else
return j;
}
}
void quick(long st , long dr)
{
long sp;
if (st<dr)
{
sp=part(st,dr);
quick(st,sp);
quick(sp+1,dr);
}
}
int main()
{
long n,i,j,u=0,num=0;
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);
scanf("%ld",&n);
for (i=1;i<=n;i++)
scanf("%ld%ld",&t[i].x,&t[i].y);
for (i=1;i<=n;i++)
for (j=i+1;j<=n;j++)
p[++u]=panta(t[i],t[j]);
quick(1,u);
for (i=1;i<u;i++)
if (fabs(p[i]-p[i+1])<eps)
num++;
printf("%ld\n",num);
return 0;
}