Pagini recente » Cod sursa (job #1566339) | Cod sursa (job #2788914) | Cod sursa (job #464866) | Monitorul de evaluare | Cod sursa (job #1457261)
# include <bits/stdc++.h>
# define x first
# define y second
# define x0 x
# define y0 y.x
# define z0 y.y
# define ll long long
# define ld double
using namespace std;
ifstream fi("trapez.in");
ofstream fo("trapez.out");
const int nmax = 1e3 + 5;
pair < int , int > s[nmax];
map < pair < int , int > , int > v;
int gcd(int a,int b)
{
return !b ? a:gcd(b,a%b);
}
int main(void)
{
int n;
fi>>n;
for (int i = 1;i <= n;++i) fi>>s[i].x>>s[i].y;
int sol1 = 0,cnt = 0;
for (int i = 1;i <= n;++i)
for (int j = i + 1;j <= n;++j) if (s[i].x == s[j].x) ++sol1;
ll ans = 1ll * sol1 * (sol1 - 1) / 2ll;
int sol2 = 0;
for (int i = 1;i <= n;++i)
for (int j = i + 1;j <= n;++j) if (s[i].y == s[j].y) ++sol2;
ans += 1ll * sol2 * (sol2 - 1) / 2ll;
for (int i = 1;i <= n;++i)
for (int j = i + 1;j <= n;++j)
if (s[i].x != s[j].x && s[i].y != s[j].y)
{
int a = s[i].y - s[j].y;
int b = s[i].x - s[j].x;
if (a < 0 && b < 0) a = -a,b = -b;
if (a > 0 && b < 0) a = -a,b = -b;
int p = 1;
if (a < 0) p = -1,a = -a;
int g = gcd(a,b);a /= g;b /= g;a *= p;
ans += v[make_pair(a,b)];
v[make_pair(a,b)]++;
}
return fo << ans << '\n',0;
}