Pagini recente » Cod sursa (job #1724158) | Cod sursa (job #1570612) | Cod sursa (job #1787879) | Cod sursa (job #21369) | Cod sursa (job #2876670)
#include <fstream>
#include <algorithm>
#define int long long
#define EPS 0.000000000001
using namespace std;
ifstream cin("trapez.in");
ofstream cout("trapez.out");
struct punct {
int x, y;
}v[1001];
struct dreapta {
int p1, p2;
long double a;
}d[1000001];
bool cmpa(dreapta x, dreapta y) {
return x.a < y.a;
}
bool verif2PanteEgale(dreapta x, dreapta y) {
return abs(x.a - y.a) < EPS;
}
signed main() {
int n, k, i, j, vertical, rez, l;
cin >> n;
for (i = 1; i <= n; i++) {
cin >> v[i].x;
cin >> v[i].y;
}
k = 0;
vertical = 0;
for (i = 1; i <= n; i++) {
for (j = i + 1; j <= n; j++) {
if (v[i].x == v[j].x) {
vertical++;
continue;
}
k++;
d[k].p1 = i;
d[k].p2 = j;
d[k].a = (long double)(v[i].y - v[j].y) / (v[i].x - v[j].x);
}
}
sort(d + 1, d + k + 1, cmpa);
rez = (vertical * (vertical - 1)) / 2;
l = 1;
for (i = 2; i <= k; i++) {
if (verif2PanteEgale(d[i], d[i - 1])) {
l++;
}
else {
rez += (l * (l - 1)) / 2;
l = 1;
}
}
rez += (l * (l - 1)) / 2;
cout << rez;
return 0;
}