Cod sursa(job #131031)
#include <fstream.h>
#include <math.h>
ifstream fin ("trapez.in");
ofstream fout ("trapez.out");
double x[1005],y[1005];
double m[1000005];
int n;
long nr,num;
void citire()
{
fin>>n;
for (int i=0;i<n;i++)
fin>>x[i]>>y[i];
fin.close();
}
void bule()
{
int ok=1,p=num;
while (ok)
{
ok=0;
p--;
for (int i=0;i<p;i++)
if (m[i]>m[i+1])
{
double aux=m[i];
m[i]=m[i+1];
m[i+1]=aux;
ok=1;
}
}
}
void panta ()
{
long ox=0,oy=0;
for (int i=0;i<n-1;i++)
for (int j=i+1;j<n;j++)
if (x[i]==x[j])
ox++;
else
if (y[i]==y[j])
oy++;
else
m[num++]=(y[i]-y[j])/(x[i]-x[j]);
nr+=ox*(ox-1)/2;
nr+=oy*(oy-1)/2;
/* for (int k=0;k<num;k++)
if (m[k]!=-10000)
{
int nur=1;
for (int h=k+1;h<num;h++)
if (fabs(m[k]-m[h])<0.00001)
{
nur++;
m[h]=-10000;
}
nr+=nur*(nur-1)/2;
} */
bule();
for (int t=0;t<num;t++)
{
long aux=t;
while (fabs(m[aux]-m[t])<0.01)
aux++;
aux-=t;
nr+=(aux)*(aux-1)/2;
t+=aux-1;
}
}
int main ()
{
citire();
panta();
fout<<nr<<"\n";
fout.close();
return 0;
}