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