Pagini recente » Cod sursa (job #234453) | Cod sursa (job #2572478) | Cod sursa (job #1349592) | Cod sursa (job #3273084) | Cod sursa (job #346458)
Cod sursa(job #346458)
#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.first || !a.second)
if (!b.first || !b.second)
return 1;
else
return b.first / b.second;
if (!b.first || !b.second)
return a.first / a.second;
*/
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 = i + 1; j <= n; ++ 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 ((i - 1) && 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);
}