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

Сломанный гвоздь

Сломанный гвоздь

На вертикальной стене висит декоративная рамка, прибитая двумя гвоздями. Рамка представляет собой многоугольник \textit{\textbf{произвольной}} формы, внутри которого есть вырезы, каждый из которых также является многоугольником \textit{\textbf{произвольной}} формы. В некоторый момент времени один из гвоздей ломается, что, в общем случае, приводит к началу колебания рамки вокруг оставшегося гвоздя под действием силы тяжести. После некоторого количества колебательных движений рамка придет в новое стационарное состояние (см. рисунок). \includegraphics{https://static.e-olymp.com/content/0b/0b938555877cdd4fe1c9c6dd61d15a61f2207f9a.jpg} Требуется определить \textbf{абсолютную величину угла}, на который повернется рамка относительно своего начального положения после того, как снова окажется в стационарном состоянии. \textbf{Примечания}: \begin{itemize} \item считается, что рамка начнет колебательное движение в случае, если расстояние по оси абсцисс между положением оставшегося гвоздя и центром тяжести рамки превышает \textbf{10^\{-6\}}; \item считается, что гвоздь имеет нулевой диаметр, т.е. при расчете центра тяжести рамки дырка от гвоздя не учитывается; \item трение между рамкой и гвоздем не учитывается; \item гарантируется, что многоугольники, образующие рамку и вырезы, не содержат пересекающихся или касающихся друг друга сторон; \item гарантируется, что стороны рамки и вырезов не касаются друг друга и не пересекают друг друга; \item гарантируется, что вырезы не накладываются друг на друга; \item гарантируется, что гвоздь расположен внутри рамки, не попадает ни в один из вырезов и не расположен на ребрах рамки или вырезов; \item гарантируется, что три подряд расположенные вершины рамки или выреза не лежат на одной прямой. \end{itemize} \InputFile Первая строка содержит одно целое число \textbf{N} -- количество вершин рамки (\textbf{3} ≤ \textbf{N} ≤ \textbf{50}). Следующие \textbf{N} строк содержат координаты \textbf{i}-ой вершины рамки в виде двух целых чисел \textbf{PiX} и \textbf{PiY}, разделенных пробелом (\textbf{1} ≤ \textbf{i} ≤ \textbf{N}, \textbf{0} ≤ \textbf{PiX} ≤ \textbf{100}, \textbf{0} ≤ \textbf{PiY} ≤ \textbf{100}). Вершины даются в порядке их соединения для получения многоугольника. Следующая строка содержит одно целое число \textbf{L} -- количество вырезов (\textbf{0} ≤ \textbf{L} ≤ \textbf{10}). Следующие \textbf{L} блоков строк дают описание каждого из вырезов. Первая строка \textbf{j}-го блока (\textbf{1} ≤ \textbf{j} ≤ \textbf{L}) содержит одно целое число \textbf{Mj} -- количество вершин \textbf{j}-го выреза (\textbf{3} ≤ \textbf{Mj} ≤\textbf{50}). Следующие \textbf{Mj} строк \textbf{j}-го блока содержат координаты \textbf{k}-ой вершины выреза в виде двух целых чисел \textbf{VkX} и\textbf{VkY}, разделенных пробелом (\textbf{1} ≤ \textbf{k} ≤ \textbf{Mj}, \textbf{1} ≤ \textbf{VkX} ≤ \textbf{99}, \textbf{1} ≤ \textbf{VkY} ≤ \textbf{99}). Вершины даются в порядке их соединения для получения многоугольника. Последняя строка содержит два целых числа \textbf{ZX} и \textbf{ZY}, разделенных пробелом -- координаты оставшегося гвоздя (\textbf{1} ≤ \textbf{ZX} ≤ \textbf{99}, \textbf{1} ≤ \textbf{ZY} ≤ \textbf{99}). \OutputFile Выходной файл должен содержать одно вещественное число \textbf{A} -- абсолютную величину угла поворота рамки (\textbf{0}≤ \textbf{A} < \textbf{180}). Вывод осуществляется с шестью десятичными знаками. Разделителем дробной и целой части считается\textbf{точка}.
Лимит времени 0.4 секунд
Лимит использования памяти 16 MiB
Входные данные #1
4
1 5
4 8
7 5
4 2
1
4
5 6
5 5
3 5
3 6
2 5
Выходные данные #1
88.210089
Источник Региональная олимпиада по программированию, СибГИУ, 2011