Pagini recente » Cod sursa (job #2525546) | Cod sursa (job #562269) | Cod sursa (job #852047) | Cod sursa (job #332053) | Cod sursa (job #2531876)
#include <bits/stdc++.h>
#define ld long double
#define fi first
#define se second
using namespace std;
ifstream in("infasuratoare.in");
ofstream out("infasuratoare.out");
int n, vf;
pair<ld, ld> pts[120100];
int main() {
auto delta = [&](pair<ld, ld> a, pair<ld, ld> b, pair<ld, ld> c) {
return a.fi * b.se + b.fi * c.se + c.fi * a.se - a.se * b.fi - b.se * c.fi - c.se * a.fi;
};
in >> n;
for (int i = 1; i <= n; i++)
in >> pts[i].fi >> pts[i].se;
sort(pts + 1, pts + n + 1);
sort(pts + 2, pts + n + 1, [&](pair<ld, ld> a, pair<ld, ld> b) {
return delta(pts[1], a, b) < 0;
});
vf = 2;
for (int i = 3; i <= n; i++) {
while (vf > 2 && delta(pts[vf - 1], pts[vf], pts[i]) > 0)
vf--;
pts[++vf] = pts[i];
}
out << vf << '\n';
for (; vf > 0; vf--)
out << fixed << setprecision(6) << pts[vf].fi << ' ' << pts[vf].se << '\n';
return 0;
}