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

Выпуклая оболочка решеточных точек

Выпуклая оболочка решеточных точек

\textit{Решеточной точкой }будем называть точку с целочисленными координатами. \textit{Решеточным многоугольником} будем называть многоугольник, все вершины которого являются решеточными точками. Многоугольник называется \textit{выпуклым}, если отрезок, соединяющий две любые его точки, лежит внутри (или на границе) многоугольника. Или то же самое, что каждый внутренний угол многоугольника меньше \textbf{180} градусов. Множеством \textbf{S} решеточных точек \textit{выпуклой оболочкой} называется наименьший выпуклый многоугольник (решеточный), который содержит в себе все точки множества. (Вершины выпуклой оболочки должны принадлежать множеству решеточных точек \textbf{S}). Если все точки лежат на одной прямой, то их выпуклой оболочкой будет отрезок (\textit{вырожденный} многоугольник -- как показано на самом правом рисунке). На рисунках ниже точки множества отмечены жирными точками, вершины выпуклой оболочки - обозначены \textbf{X}, а выпуклая оболочка отображена в виде отрезков, соединяющих ее вершины. Не все точки на выпуклой оболочке являются ее вершинами. \includegraphics{https://static.e-olymp.com/content/ff/ffeb9792655090791b473be62e79c217de879e55.jpg} Вершины решеточного многоугольника находятся в \textit{стандартном порядке}, если: a) Первая вершина имеет наибольшую \textbf{y} координату. Если две вершины имеют одинаковую \textbf{y} координату, то первой считается та, у которой \textbf{x} меньше. b) Вершины многоугольника задаются по часовой стрелке. Напишите программу, которая читает множество решеточных точек и выводит вершины выпуклой оболочки в \textit{стандартном порядке}. \InputFile Первая строка содержит единственное целое число \textbf{P}, (\textbf{1} ≤ \textbf{P} ≤ \textbf{1000}) - количество тестов. Первая строка каждого теста содержит его номер, пробел и количество точек \textbf{N} (\textbf{3} ≤ \textbf{N} ≤ \textbf{50}) во множестве. Далее задаются точки множества, не более \textbf{5} точек в каждой строке (последняя строка может содержать и меньше). Каждая точка задается двумя целыми числами, разделенными пробелом, описывающих ее \textbf{x} и \textbf{y} координату. \OutputFile Для каждого теста следует вывести несколько строк. Первая строка содержит номер теста и количество вершин в выпуклой оболочке. Далее следуют вершины выпуклой оболочки в стандартном порядке, по одной вершине в строке. Каждая строка содержит \textbf{x} и \textbf{y} координату вершины, разделенные пробелом.
Лимит времени 1 секунда
Лимит использования памяти 64 MiB
Входные данные #1
4
1 25
2 1 7 1 1 2 9 2 1 3
10 3 1 4 10 4 1 5 10 5
2 6 10 6 2 7 9 7 3 8
8 8 4 9 7 9 6 2 3 3
5 4 7 5 8 6 4 6 3 7
2 30
3 9 6 9 3 8 9 8 3 7
12 7 2 6 12 6 2 5 12 5
2 4 12 4 1 3 11 3 1 2
11 2 1 1 11 1 1 0 10 0
4 -1 10 -1 7 -2 10 -2 5 0
7 3 4 5 6 8 3 1 2 6
3 3
3 1 2 2 1 3
4 6
1 3 19 1 4 2 2 1 11 2
10 1
Выходные данные #1
1 10
4 9
7 9
10 6
10 3
9 2
7 1
2 1
1 2
1 5
2 7
2 8
3 9
6 9
12 7
12 4
10 -2
7 -2
1 0
1 3
3 2
1 3
3 1
4 4
1 3
11 2
19 1
2 1