Pagini recente » Cod sursa (job #3359202) | Cod sursa (job #3359183) | Cod sursa (job #3359196)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("trapez.in");
ofstream fout("trapez.out");
int n;
long long ans;
vector<pair<long long, long long> > p;
vector<pair<long long, long long> > v;
long long cmmdc(long long a, long long b) {
while(b) {
long long r = a % b;
a = b;
b = r;
}
return a;
}
int main() {
fin >> n;
p.resize(n);
for(int i = 0; i < n; i++) {
fin >> p[i].first >> p[i].second;
}
for(int i = 0; i < n; i++) {
for(int j = i + 1; j < n; j++) {
long long dx = p[j].first - p[i].first;
long long dy = p[j].second - p[i].second;
if(dx == 0) {
dy = 1;
} else if(dy == 0) {
dx = 1;
} else {
if(dx < 0) {
dx = -dx;
dy = -dy;
}
long long g = cmmdc(abs(dx), abs(dy));
dx /= g;
dy /= g;
}
v.push_back({dx, dy});
}
}
sort(v.begin(), v.end());
for(int i = 0; i < v.size(); i++) {
int j = i;
while(j < v.size() && v[j] == v[i]) {
j++;
}
long long cnt = j - i;
ans += cnt * (cnt - 1) / 2;
i = j - 1;
}
fout << ans << "\n";
return 0;
}