Pagini recente » Cod sursa (job #917022) | Cod sursa (job #3000983) | Cod sursa (job #2149326) | Cod sursa (job #24250) | Cod sursa (job #327968)
Cod sursa(job #327968)
#include <cstdio>
#include <algorithm>
using namespace std;
#define FIN "trapez.in"
#define FOUT "trapez.out"
#define N 1002
#define M 1000005
int n, r, m;
pair <int, int> v[N], d[M];
void read()
{
int i;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &n);
for (i = 1; i <= n; ++ i)
scanf("%d%d", &v[i].first, &v[i].second);
}
int comp(pair <int,int> a, pair <int, int> b)
{
if (!a.second || !b.second)
return !b.second && !a.second;
if (!a.first || !b.first)
return !b.first && !a.first;
return (a.first * b.second) > (b.first * a.second);
}
int match(pair <int, int> a, pair <int, int> b)
{
return (a.first * b.second == a.second * b.first);
}
void solve()
{
int i, j, x = 0;
for (i = 1; i <= n; ++ i)
for (j = 1; j <= n; ++ j)
if (i != j)
d[++m] = make_pair(v[i].first - v[j].first, v[i].second - v[j].second);
sort(d + 1, d + m + 1, comp);
for (i = 1; i < m; ++ i)
if (match(d[i], d[i + 1]))
if (match(d[i], d[i - 1]))
++ x;
else
{
r += x * (x - 1) / 2;
x = 2;
}
r += x * (x - 1) / 2;
}
int main()
{
read();
solve();
printf("%d\n", r);
}