Гора определяется как набор линейных сегментов , чьи первая точка имеет координаты , (0,a)
где это a > 0
, и чья последняя точка имеет координаты (b,0)
, где b > 0
. Все промежуточные точки имеют y-координату (ординату), строго превышающую 0. Вам даны точки на горе, отсортированные в порядке возрастания x-координаты (абсцисса). Обратите внимание, что две точки могут иметь одинаковую X-координату, образуя вертикальный сегмент горы. Если вам даны две точки с одинаковыми координатами x, они должны быть связаны в том порядке, в котором они указаны. Кроме того, могут быть горизонтальные сегменты горы. Эти горизонтальные сегменты не освещены, несмотря ни на что. Все координаты являются неотрицательными целыми числами.
Вопрос: какова общая длина горы, которая будет освещена, если предположить, что солнце представляет собой бесконечную вертикальную плоскость света, расположенную справа от горы? Это число не нужно округлять, но если оно округлено, включите как минимум четыре знака после запятой. Я включил картинку: здесь жирные линии представляют подсвеченные сегменты. Обратите внимание, что на входе P отображается перед Q (PQ - вертикальный отрезок), поэтому предыдущая точка связана с P, а не с Q.
Вы можете принимать данные в любом разумном формате, например, список списков, один список, строка и т. Д.
Прецедент:
(0,3000)
(500, 3500)
(2500, 1000)
(5000,5000)
(9000,2000)
(9000,3500)
(10200,0)
Output: 6200.0000
Здесь есть два подсвеченных сегмента, как показано на этом изображении: первый имеет длину 5000/2 = 2500, а второй имеет длину 3700.
Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
(x1, y1)
и(x2,y2)
. Точкой, которая его «блокирует»(x3, y3)
. Предположим, что y2 <y3 <= y1. Тогда длина отрезка равна((y1 - y3)/(y1 - y2))*sqrt((x1 - x2)^2 + (y1 - y2)^2)
. формула расстояния, умноженная на долю фактически используемого сегмента