Pagini recente » Cod sursa (job #2812629) | Cod sursa (job #395239) | Cod sursa (job #2078173) | Cod sursa (job #673363) | Cod sursa (job #2283233)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
struct Punct {
int x, y;
};
struct Dreapta {
Punct p1, p2;
};
inline bool cmp(Dreapta d1, Dreapta d2) {
return ( ( (d1.p2.y - d1.p1.y) * (d2.p2.x - d2.p1.x) < (d2.p2.y - d2.p1.y) * (d1.p2.x - d1.p1.x) ) ? 1:0 );
}
inline bool cmp2(Punct p1, Punct p2) {
return ( (p1.x < p2.x) ? 1:0 );
}
bool commonTg(Dreapta, Dreapta);
int main() {
ifstream f("trapez.in");
ofstream g("trapez.out");
int n, nrDrepte;
f >> n;
Punct p[n];
for (int i = 0; i < n; ++i) {
f >> p[i].x >> p[i].y;
}
sort(p, p + n, cmp2);
Dreapta d[n * n];
nrDrepte = 0;
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) {
d[nrDrepte].p1 = p[i];
d[nrDrepte].p2 = p[j];
nrDrepte ++;
}
}
sort(d, d + nrDrepte, cmp);
int nrCurrent = 1;
long long int answer = 0;
for (int i = 1; i < nrDrepte; ++i) {
if ( commonTg(d[i], d[i - 1]) ) {
nrCurrent ++;
} else {
answer += (nrCurrent * (nrCurrent - 1) / 2 );
nrCurrent = 1;
}
}
/*
for (int i = 0; i < nrDrepte; ++i) {
cout << d[i].p1.x << " " << d[i].p1.y << " " << d[i].p2.x << " " << d[i].p2.y << "\n";
}
*/
g << answer;
return 0;
}
bool commonTg(Dreapta d1, Dreapta d2) {
return ( ( (d1.p2.y - d1.p1.y) * (d2.p2.x - d2.p1.x) == (d2.p2.y - d2.p1.y) * (d1.p2.x - d1.p1.x) ) ? 1:0 );
}