Acoperirea convexă a unui poligon stelat


Trimite soluție

Puncte: 10 (parțial)
Limita de timp: 0.5s
Limita de memorie: 256M

Autori:
Tipuri de probleme
Limbajele acceptate
C, C++, Java, Python

Un poligon \(P_1 P_2 \dots P_n P_1\) se numește stelat dacă există un punct \(M\) în interiorul său astfel încât, oricum s-ar alege un punct \(X\) pe laturile poligonului sau un vârf al acestuia, segmentul \([MX]\) este conținut în întregime în interiorul poligonului.

Fiind dat un poligon stelat, trebuie să implementați un algoritm cu complexitate liniară de timp care să găsească acoperirea convexă a unui poligon stelat.

Date de intrare

Se va citi de la tastatură un număr \(n\), reprezentând numărul de vârfuri al poligonului și apoi \(n\) linii care conțin perechi de numere întregi \(x_i y_i\), separate prin spațiu, reprezentând coordonatele vârfului \(P_i\), parcurse în sens trigonometric.

Date de ieșire

Programul va afișa un număr \(k\), reprezentând numărul de vârfuri al acoperirii convexe a mulțimii \({ P_1, P_2, \dots, P_n }\) și apoi \(k\) perechi de numere întregi, pe linii distincte, reprezentând coordonatele acestor vârfuri, parcurse tot în sens trigonometric (dar puteți porni de la orice vârf).

Restricții și precizări

  • \(1 \leq n \leq 100\,000\)
  • \(-10^9 \leq x_i, y_i \leq 10^9\)

Exemple

Exemplul 1
Input
3
-1 3
-3 -2
4 -3
Output
3
-1 3
-3 -2
4 -3
Explicație

Exemplul corespunde următorului poligon stelat, un triunghi oarecare:

Triunghi oarecare, a cărui acoperire convexă este chiar el însuși

Puteți începe să descrieți acoperirea convexă de la orice vârf al ei, cât timp parcurgerea este în sens trigonometric. \((-3, 2), (4, -3), (-1, 3)\) și \((4, -3), (-1, 3), (-3, 2)\) erau de asemenea soluții acceptabile.

Exemplul 2
Input
10
0 3
-1 1
-5 0
-2 -1
-4 -5
1 -2
5 -3
3 0
6 3
2 2
Output
5
-4 -5
5 -3
6 3
0 3
-5 0
Explicație

Exemplul corespunde următorului poligon stelat, o stea neregulată cu 5 colțuri:

Stea cu cinci colțuri, a cărui acoperire convexă este formată dintr-o submulțime a vârfurilor sale

Exemplul 3
Input
8
0 2
-2 2
-2 0
-2 -2
0 -2
2 -2
2 0
2 2
Output
4
-2 2
-2 -2
2 -2
2 2
Explicație

Exemplul dat este o stea cu 4 colțuri degenerată, care e de fapt un pătrat:

Pătrat