Pagini recente » Cod sursa (job #2654430) | Cod sursa (job #1461250) | Cod sursa (job #1739188) | Cod sursa (job #3272393) | Cod sursa (job #2876442)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("trapez.in");
ofstream fout ("trapez.out");
const int NMAX = 1000;
struct points {
int x, y;
bool operator == (const points &val) const {
return (x == val.x && y == val.y);
}
};
points v[NMAX + 2];
points seg[NMAX * NMAX + 2];
bool cmp (points A, points B) {
return A.x * B.y < B.x * A.y;
}
points tgSeg(points a, points b){
int difx = a.x - b.x;
int dify = a.y - b.y;
int gcd = __gcd(difx, dify);
return {difx / gcd, dify / gcd};
}
int main() {
int n, i, j, nrSeg;
fin >> n;
for (i = 1; i <= n; ++i)
fin >> v[i].x >> v[i].y;
nrSeg = 0;
for (i = 1; i <= n; ++i)
for (j = 1 + i; j <= n; ++j)
seg[++nrSeg] = tgSeg(v[i], v[j]);
sort (seg + 1, seg + nrSeg + 1, cmp);
int ans = 0;
int cnt = 1;
for (i = 1; i <= nrSeg; ++i) {
if (seg[i] == seg[i + 1])
++cnt;
else {
ans = ans + (cnt - 1) * cnt / 2;
cnt = 1;
}
}
fout << ans;
return 0;
}