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

Соединенные гифы

Соединенные гифы

Гифы (множественное слово от гиф) - это объекты, подобные воронкам. Определим гиф как двумерный объект, заданный последовательностью точек (\textbf{p_1}, \textbf{p_2}, ..., \textbf{p_n}) со следующими условиями: \begin{itemize} \item \textbf{3} ≤ \textbf{n} ≤ \textbf{1000}; \item Пусть точка \textbf{p_i} имеет координаты (\textbf{x_i}, \textbf{y_i}). Если существует такой индекс \textbf{c} (\textbf{1} < \textbf{c} < \textbf{n}), что \textbf{y_1} > \textbf{y_2} > ... > \textbf{y_c} и \textbf{y_c} < \textbf{y_c_\{+1\}} < \textbf{y_c_\{+2\}} < ... < \textbf{y_n}, то \textbf{p_c} называется выступом гифа; \item Для всех \textbf{1} ≤ \textbf{i} < \textbf{c}, \textbf{x_i} < \textbf{x_c} и для всех \textbf{c} < \textbf{i} ≤ \textbf{n}, \textbf{x_i} > \textbf{x_c}; \item Для \textbf{1} < \textbf{i} < \textbf{c} угол, на который необходимо обернуть \textbf{p_i_\{-1\}} вокруг \textbf{p_i} по ходу часовой стрелки так, чтобы точка \textbf{p_i_\{-1\}} стала коллинеарной \textbf{p_ip_i_\{+1\}}, больше \textbf{180} градусов. Аналогично для \textbf{c} < \textbf{i} < \textbf{n} угол поворота \textbf{p_i_\{-1\}} вокруг \textbf{p_i} по часовой стрелке чтобы стать коллинеарной \textbf{p_ip_i_\{+1\}}, также больше \textbf{180 }градусов. \item Отрезки, соединяющие две соседние точки, пересекаются между собой только в своих концах. \end{itemize} Например, на следующем рисунке представлен гиф с шестью точками и \textbf{c = 4}: \includegraphics{https://static.e-olymp.com/content/e4/e471c1cd1b6b7cf50bb9bd28b9d19b5d0286214d.jpg} Последовательность отрезков (\textbf{p_1p_2}, \textbf{p_2p_3}, ..., \textbf{p_n_\{-1\}p_n}) будем называть телом гифа. Вам заданы два гифа \textbf{P} = (\textbf{p_1}, \textbf{p_2}, ..., \textbf{p_n}) и \textbf{Q} = (\textbf{q_1}, \textbf{q_2}, ..., \textbf{q_m}), где все \textbf{x} координаты \textbf{p_i} целые отрицательные числа, а все \textbf{x} координаты \textbf{q_i} целые положительные числа. Считая, что выступы двух гифов соединены между собой узкой трубкой, наполним гифы водой. Когда вода начнет поступать, гифы будут наполняться согласно известным физическим законам (уровень воды в обоих гифах остается одинаковым). Если в гифе \textbf{P} уровень воды достигнет \textbf{min(y_1, y_n)}, то вода начнет выливаться из гифа (то же самое можно сказать про гиф \textbf{Q}). Ваша программа должна определить уровень воды в двух гифах после того как туда зальют некоторое ее количество. Поскольку задача рассматривается в двух измерениях, то количество воды измеряется заполненной площадью. Объем трубки, соединяющей выступы гифов, считать равным нулю. \InputFile Первая строка содержит количество тестов \textbf{t}. Каждый тест задается в трех строках. Первая строка содержит одно целое число \textbf{a} (\textbf{1} ≤ \textbf{a} ≤ \textbf{100000}) - количество воды, влитое в два гифа. Следующие две строки описывают два гифа \textbf{P} и \textbf{Q} соответственно. Каждый гиф задается в виде \textbf{k x_1 y_1 x_2 y_2 ... x_k y}_k, где \textbf{k} - количество точек в гифе (\textbf{n} для \textbf{P} и \textbf{m} для \textbf{Q}), последовательность \textbf{x_i y_i} задает координаты точек гифа. \OutputFile Вывести \textbf{t} строк, каждая из которых содержит одно число \textbf{L} - конечный уровень воды, выраженный в единицах \textbf{y} координат, округленный до трех десятичных знаков.
Лимит времени 1 секунда
Лимит использования памяти 64 MiB
Входные данные #1
2
25
3 -30 10 -20 0 -10 10
3 10 10 20 0 30 10
25
3 -30 -10 -20 -20 -10 -10
3 10 10 20 0 30 10
Выходные данные #1
3.536
-15.000