Pagini recente » Cod sursa (job #2709775) | Cod sursa (job #469693) | Cod sursa (job #2486760) | Cod sursa (job #1943050) | Cod sursa (job #2296132)
#include<cstdio>
#include<algorithm>
using namespace std;
struct dr
{
int x;
int y;
};
int x[1005], y[1005];
dr perechi[600000];
bool cmp(dr a, dr b)
{
if(a.y == 0 || b.y == 0)
{
if(a.y == 0 && b.y == 0)
return 0;
else
if(a.y == 0)
return 0;
else
return 1;
}
if((double) a.x / a.y > (double)a.x / b.y)
return 1;
else
return 0;
}
int same(dr a, dr b)
{
if(a.y == 0 || b.y == 0)
{
if(a.y == 0 && b.y == 0)
return 1;
else
return 0;
}
if((double) a.x / a.y - (double)b.x / b.y <= 0.00001 && (double) a.x / a.y - (double)b.x / b.y >= 0 - 0.00001)
return 1;
else
return 0;
}
int main()
{
int n, i, j, nr = 0, nc;
long long a, b, sum = 0;
scanf("%d", &n);
for(i = 1; i <= n; ++ i)
scanf("%d%d", &x[i], &y[i]);
for(i = 1; i < n; ++ i)
for(j = i + 1; j <= n; ++ j)
{
perechi[++ nr].x = x[i] - x[j];
perechi[nr].y = y[i] - y[j];
}
sort(perechi + 1, perechi + nr + 1, cmp);
for(i = 1; i <= nr; ++ i)
{
nc = 0;
while(same(perechi[i], perechi[i + nc + 1]) && i + nc < nr)
{
++ nc;
}
sum = sum + (long long) (((long long)nc * (nc + 1))/2);
}
printf("%lld", sum);
return 0;
}