Cod sursă (job #694422)

Utilizator avatar DKMKD Matei Filibiu DKMKD IP ascuns
Problemă Înfășurătoare convexă Compilator cpp-32 | 1,86 kb
Rundă Arhiva de probleme Status evaluat
Dată 10 feb. 2023 20:28:25 Scor 10
#include <bits/stdc++.h>
#include <unordered_map>
#include <map>

using namespace std;

ifstream fin("infasuratoare.in");
ofstream fout("infasuratoare.out");
//-----------------------------------------
#define ll long long
#define pii pair<int, int>
#define pll pair<long long, long long>
#define vi vector<int>
#define vll vector<long long>
#define mii map<int, int>
#define si set<int>
#define sc set<char>
//-----------------------------------------
#define f(i,s,e) for(int i=s;i<=e;++i)
#define nf(i,s,e) for(i=s;i<e;++i)
#define rf(i,e,s) for(i=e;i>=s;--i)
#define pb push_back
#define eb emplace_back
#define fi first
#define se second
#define sp <<" "
#define A(a,b,c) ((b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y))
//------------------------------------------
const int NMAX = 12e5 + 5;
const int KMAX = 1e1 + 5;
const int MOD = 1e5 + 3;
const int INF = 0x3f3f3f3f;
const int PI = 3.141592654;
//------------------------------------------
int n, p, i, t, s[NMAX];
struct P {
	int x, y;
};
P v[NMAX], r, u[NMAX];
//------------------------------------------
void read() {
	fin >> n;
	for (p = i = 1; i <= n; ++i)
		fin >> v[i].x >> v[i].y, p = v[i].x < v[p].x || (v[i].x == v[p].x && v[i].y < v[p].y) ? i : p;
}
void M(int l, int r){
	if (l == r)
		return;
	int i, j, k, m = (l + r) / 2;
	for (M(l, m), M(m + 1, r), i = k = l, j = m + 1; i <= m || j <= r;)
		u[k++] = (j > r || (i <= m && A(v[1], v[i], v[j]) < 0)) ? v[i++] : v[j++];
	for (i = l; i <= r; ++i)
		v[i] = u[i];
}
void solve() {
	for (r = v[1], v[1] = v[p], v[p] = r, M(2, n), s[++t] = 1, i = 2; i <= n; ++i) {
		for (; t > 1 && A(v[s[t - 1]], v[s[t]], v[i]) > 0; --t);
		s[++t] = i;
	}
	for (fout << t << "\n"; t; --t)
		fout << v[s[t]].x << " " << v[s[t]].y << "\n";
}
int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	read();
	solve();
	return 0;
}