Pagini recente » Cod sursa (job #551732) | Cod sursa (job #1915153) | Cod sursa (job #438788) | Cod sursa (job #177859) | Cod sursa (job #3143400)
#include <bits/stdc++.h>
using namespace std;
int gcd(int a, int b)
{
if(!b)
return a;
return gcd(b, a % b);
}
typedef long long ull;
int solve(vector<vector<int>> v)
{
int n = v.size(), ans = 0;
vector<ull> arr;
ull add = 2000000000;
ull base = 4000000005ULL;
int vert = 0;
for(int i = 0;i < n;++i)
for(int j = i + 1;j < n;++j)
{
int x = v[j][0] - v[i][0];
int y = v[j][1] - v[i][1];
if(!x)
++vert;
else
{
if(x < 0)
x = -x, y = -y;
int gc = gcd(x, y);
arr.push_back((ull) x / gc * base + y / gc + add);
}
}
ans += (vert * (vert - 1)) / 2;
sort(arr.begin(), arr.end());
int cnt = 1;
for(int i = 1;i < arr.size();++i)
{
if(arr[i] != arr[i - 1])
{
ans += (cnt * (cnt - 1)) / 2;
cnt = 1;
}
else
++cnt;
}
return ans + (cnt * (cnt - 1)) / 2;
}
int main() {
freopen("trapez.in", "r", stdin);
freopen("trapez.out", "w", stdout);
int n;
cin >> n;
vector<vector<int>> v;
for(int i = 0;i < n;++i)
{
vector<int> tmp(2);
cin >> tmp[0] >> tmp[1];
v.push_back(tmp);
}
cout << solve(v) << "\n";
}