Pagini recente » Cod sursa (job #2565237) | Cod sursa (job #2869310) | Cod sursa (job #965441) | Cod sursa (job #316085) | Cod sursa (job #286271)
Cod sursa(job #286271)
#include <cstdio>
#include <math.h>
using namespace std;
#define Nmax 1024
int n, x[Nmax], y[Nmax], nr;
float p[Nmax*Nmax];
void qsort(int st,int dr)
{
int i=st,j=dr;
float tmp, sch = p[(i+j)/2];
do
{
while (p[i] < sch) ++i;
while (p[j] > sch) --j;
if (i<=j)
{
tmp = p[i];
p[i] = p[j];
p[j] = tmp;
++i; --j;
}
} while (i<=j);
if (st<j) qsort(st,j);
if (i<dr) qsort(i,dr);
}
int main()
{
freopen("trapez.in","r",stdin);
freopen("trapez.out","w",stdout);
scanf("%d", &n);
for (int i=1;i<=n;++i)
{
scanf("%d%d", x+i,y+i);
for (int j=1;j<i;++j)
p[++nr] = atan2((float)y[i]-(float)y[j],(float)x[i]-(float)x[j]);
}
qsort(1,nr);
long long tmp = 0, ret = 0, a,b,c;
p[0] = -666;
for (int i=1;i<=nr;++i)
if (p[i]!=p[i-1])
{
a = tmp;
b = a-1;
c = a;
c *= b;
c = c/2;
if (c>0)
ret += c;
tmp = 0;
}
else
++tmp;
a = tmp;
b = a-1;
c = a*b;
c = c/2;
if (c>0)
ret += c;
printf("%lld\n", ret);
return 0;
}