Góra jest zdefiniowana jako zbiór odcinków, których pierwszy punkt ma współrzędne (0,a)
miarę a > 0
, i którego ostatni punkt ma współrzędne (b,0)
, gdzie b > 0
. Wszystkie punkty pośrednie mają współrzędną y (rzędną) ściśle większą niż 0. Dostajesz punkty na górze posortowane w porządku rosnącym współrzędnych x (odcięta). Zauważ, że dwa punkty mogą mieć tę samą współrzędną x, tworząc pionowy odcinek góry. Jeśli otrzymasz dwa punkty o tej samej współrzędnej x, należy je połączyć w podanej kolejności. Ponadto mogą istnieć poziome segmenty góry. Te poziome segmenty nie są oświetlone, bez względu na wszystko. Wszystkie współrzędne są liczbami całkowitymi nieujemnymi.
Pytanie: jaka jest całkowita długość góry, która byłaby oświetlona, zakładając, że słońce jest nieskończoną pionową płaszczyzną światła usytuowaną na prawo od góry? Liczby tej nie trzeba zaokrąglać, ale jeśli jest zaokrąglona, należy podać co najmniej cztery miejsca po przecinku. Zawarłem zdjęcie: pogrubione linie reprezentują podświetlone segmenty. Zauważ, że na wejściu P pojawia się przed Q (PQ jest pionowym odcinkiem linii), więc poprzedni punkt jest podłączony do P, a nie do Q.
Możesz przyjmować dane wejściowe w dowolnym rozsądnym formacie, takim jak lista list, pojedyncza lista, ciąg znaków itp.
Przypadek testowy:
(0,3000)
(500, 3500)
(2500, 1000)
(5000,5000)
(9000,2000)
(9000,3500)
(10200,0)
Output: 6200.0000
Są tutaj dwa podświetlone segmenty, jak pokazano na tym obrazku: Pierwszy ma długość 5000/2 = 2500, a drugi ma długość 3700.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
(x1, y1)
i(x2,y2)
. Punktem, który „blokuje” jest(x3, y3)
. Załóżmy, że y2 <y3 <= y1. Zatem długość segmentu to((y1 - y3)/(y1 - y2))*sqrt((x1 - x2)^2 + (y1 - y2)^2)
. Jest to zasadniczo wzór na odległość pomnożony przez ułamek faktycznie używanego segmentu