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

Площадь между внешней и внутренней оболочками

Площадь между внешней и внутренней оболочками

Задано множество \textbf{S} из \textbf{N} точек на плоскости, а именно \textbf{S = \{(x\[0\], y\[0\]), (x\[1\], y\[1\]), ..., (x\[N-1\], y\[N-1\])\}}. Внешняя выпуклая оболочка \textbf{Ho }множества \textbf{S} - это сама выпуклая оболочка \textbf{S}. Это такое подмножество точек \textbf{S}, которые если соединить отрезками, то образуется выпуклый многоугольник \textbf{P} наименьшей площади такой, что все точки \textbf{S} лежат внутри \textbf{P} или на \textbf{P}. Точки из \textbf{S}, лежащие на \textbf{P}, но не являющиеся вершинами \textbf{P}, не являются частью выпуклой оболочки. Внутренняя выпуклая оболочка \textbf{Hi} множества \textbf{S} получается построением выпуклой оболочки множества \textbf{S--Ho}. То есть удалением из множества \textbf{S }всех точек, принадлежащих внешней выпуклой оболочке \textbf{Ho}, вследствие чего получается множество \textbf{(S--Ho)}. Внутренняя выпуклая оболочка \textbf{Hi} строится как выпуклая оболочка \textbf{(S--Ho)}. \includegraphics{https://static.e-olymp.com/content/fb/fba50093355eeed09781c310ce218aa3bb0fca9f.jpg} Например, пусть множество \textbf{S} состоит из \textbf{8} точек \textbf{A(2.0, 5.0)}, \textbf{B(2.0, 4.0)}, \textbf{C(2.0, 2.0)}, \textbf{D(1.0, 1.0)}, \textbf{E(4.0, 1.0)}, \textbf{F(0.0, 0.0)}, \textbf{G(3.0, 0.0)} и \textbf{H(5.0, 0.0)}. Внешнюю выпуклую оболочку \textbf{Ho} множества \textbf{S} образует множество \textbf{Ho = \{F, H, A, F\}}. Если удалить \textbf{Ho} из \textbf{S}, то получим \textbf{S--Ho = \{B, C, D, E, G\}}. Внутренняя выпуклая оболочка \textbf{Hi }множества \textbf{S} вычисляется как выпуклая оболочка \textbf{S--Ho}, то есть \textbf{Hi = \{D, G, E, B, D\}}. Площадь внутри \textbf{Ho} равна \textbf{area(Ho) = 12.5}. Площадь внутри \textbf{Hi} равна \textbf{area(Hi) = 6.0}. Площадь, заключенная между внешней выпуклой оболочкой \textbf{Ho} и внутренней \textbf{Hi}, равна \textbf{12.5 -- 6.0 = 6.5}. Напишите программу, которая по заданному множеству \textbf{S} из \textbf{N} точек вычислит площадь между внешней выпуклой оболочкой \textbf{Ho} множества \textbf{S} и внутренней выпуклой оболочкой \textbf{Hi} множества \textbf{S}. \InputFile Входные данные состоят из нескольких тестов. Первая строка каждого теста содержит \textbf{problemID} и значение \textbf{N}, не превосходящее \textbf{1000}. Следующие \textbf{N} строк содержат значения \textbf{x}- и \textbf{y}-координат (разделенные пробелом) точки, каждая точка задается в одной строке. Каждая координата \textbf{x} или \textbf{y} является действительным числом, не большим \textbf{100.0} по модулю. Тесты следуют непосредственно друг за другом. Строка с \textbf{problemID} равным "\textbf{ZZ}" и значением \textbf{N} =\textbf{0} указывает на конец входных данных. \OutputFile Для каждого теста вывести строку вида "\textbf{ProblemID id: area}", где \textbf{id} хранит \textbf{problemID} заданную во входных данных, \textbf{area} - площадь между вычисленной внешней выпуклой оболочкой \textbf{Ho} и внутренней \textbf{Hi}. Площадь следует выводить с \textbf{4} десятичными знаками.
Лимит времени 5 секунд
Лимит использования памяти 128 MiB
Входные данные #1
A1 8
2.0 5.0
2.0 4.0
2.0 2.0
1.0 1.0
4.0 1.0
0.0 0.0
3.0 0.0
5.0 0.0
A2 11
1.0 5.0
5.0 5.0
2.0 4.0
3.0 4.0
2.0 3.0
2.0 2.0
3.0 2.0
1.0 1.0
4.0 1.0
0.0 0.0
4.0 0.0
ZZ 0
Выходные данные #1
ProblemID A1: 6.5000
ProblemID A2: 14.0000
Источник ACM ICM Philippines Multi-Provincial Programming Contest 2013