B. Облако

Имя входного файла: cloud.in
Имя выходного файла: cloud.out
Ограничение по времени: 2 s
Ограничение по памяти: 256 megabytes

Константин Константинович Константинопольский – ученый-метеоролог. Недавно он увлекся строительством летательных аппаратов и построил радиоуправляемый зонд для исследования кучевых облаков.

Для исследования облака Константин Константинович поднимает аппарат в воздух, направляет его полёт параллельно поверхности Земли (поскольку высота небольшая, Землю можно считать плоской), после чего ориентирует аппарат таким образом, чтобы он пролетел сквозь облако по прямой линии. Константин Константинович понимает, что пока аппарат находится внутри облака, менять его курс рискованно, поскольку облако может исказить управляющие сигналы с пульта.

Так как качество исследования облака напрямую зависит от количества собранных данных, Константин Константинович хочет узнать, сколько времени аппарат проведёт в полёте внутри облака.

Для упрощения задачи Константин Константинович считает поверхность Земли плоской, а облако представляет в виде многоугольника на плоскости (необязательно выпуклого). Поскольку аппарат сравнительно мал, Константин Константинович считает его материальной точкой с некоторым заданным изначально направлением движения. Вам требуется по координатам точек многоугольника-облака, начальным координатам аппарата и вектору его скорости определить, какой путь аппарат проведёт внутри облака. При этом путь по границе облака учитывать не нужно.

Формат входного файла

В первой строке входного файла задано одно число N – количество вершин в многоугольнике, описывающем облако (1 ≤ N ≤ 100). Далее в N строках расположено по два числа xi, yi – координаты i-той вершины многоугольника (в порядке обхода). После этого в одной строке задается четыре числа x0, y0, vx, vy – координаты начального положения аппарата и его вектора скорости. Все координаты являются вещественными числами, не более чем с тремя знаками после десятичной точки. Все координаты не превосходят 1000 по модулю.

Формат выходного файла

Выведите единственное число – длину пути, которую аппарат проведёт внутри облака. Ваш ответ будет считаться корректным, если абсолютная или относительная погрешность ответа будет не более 10-5.

Пример:

cloud.incloud.out
4 0 0 0 1 1 1 1 0 -1 -1 1 1 1.4142135624
4 0 0 0 1 1 1 1 0 -1 0 1 0 0.00000
5 0 0 1 10 2 1 3 10 4 0 -1 1 1 0 3.8000000000

В примере 2 иллюстрируется условие, что путь по границе облака учитывать не нужно.

В примере 3 демонстрируется, что путь аппарата в облаке может состоять из нескольких отрезков.


Источник: Открытый весенний чемпионат ПетрГУ по программированию, 20 апреля 2014

Обсудить       Отправить решение



Версия для печати