eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Выпуклая оболочка

Выпуклая оболочка

\includegraphics{https://static.e-olymp.com/content/79/7913cb36340b423d9e084d35c5564c08ba525c23.jpg} Поиск выпуклой оболочки множества точек является важной задачей, которая часто является частью более широкой задачи. Есть много алгоритмов для нахождения выпуклой оболочки. Так как задачи, связанные с выпуклой оболочкой, иногда появляются в ACM - чемпионатах мира по программированию, то это хорошая идея для участников узнать более подробно некоторые из этих алгоритмов. Нахождение выпуклой оболочки множества точек на плоскости может быть разделено на две подзадачи. Во-первых, дано множество точек. Нужно найти подмножество тех точек, которые вместе с отрезками, их соединяющими, имеют форму выпуклого многоугольника, который охватывает все исходные точки. Во-вторых, вывести все точки выпуклой оболочки, идя против часовой стрелки вокруг многоугольника. В этой задаче, задача первой подкатегории уже сделана за вас, а ваша программа должна решать вторую подзадачу. То есть, учитывая те точки, которые, как известно, лежат на выпуклой оболочке, вывести их в порядке обхода против часовой стрелки вокруг многоугольника. \InputFile Первая строка входного файла содержит одно целое число \textbf{3} ≤ \textbf{N} ≤ \textbf{100000}, количество точек. Следующие строки входного файла задают каждую точку. Каждая из этих строк содержит два целых числа и либо \textbf{Y}, либо \textbf{N}, разделенные пробелами. Два целых чисел определяют \textbf{x}- и \textbf{y}-координаты точки. \textbf{Y} указывает, что точка находится на выпуклой оболочке всех точек, а \textbf{N} указывает, что это не так. \textbf{x}- и \textbf{y}-координаты каждой точки будут не меньше, чем \textbf{-1000000000} и не более \textbf{1000000000}. Каждая точка задана только один раз. Точки во входных данных никогда не лежат на одной прямой. \OutputFile В первую строку в выходном файле выведите одно целое число \textbf{m} -- число точек на выпуклой оболочке. В последующих \textbf{m} строчках выведите по паре чисел, каждая из которых описывает точку на выпуклой оболочки, в порядке обхода против часовой стрелки вокруг многоугольника. Каждая из этих строк должна содержать \textbf{x}-координату точки, затем пробел, а затем \textbf{y}-координату точки. Начните с точки на многоугольнике, у которой координата \textbf{x} минимальна. Если есть несколько таких точек, начните с той, чья координата \textbf{y} минимальна.
Лимит времени 1 секунда
Лимит использования памяти 64 MiB
Входные данные #1
5
1 1 Y
1 -1 Y
0 0 N
-1 -1 Y
-1 1 Y
Выходные данные #1
4
-1 -1
1 -1
1 1
-1 1