Płyniesz kajakiem po dość szybkiej rzece o białych wodach. Nagle wiosła eksplodują i znajdujesz się w niebezpiecznej sytuacji, pędzącej szybko rzeką bez żadnych wioseł. Na szczęście nadal masz umiejętności programistyczne, więc postanawiasz wykuć program na boku kajaka, aby pomóc ci przetrwać bystrza. Jednak z boku czółna nie ma zbyt dużej powierzchni do pisania programu, więc program musi być jak najkrótszy.
Rzekę można przedstawić jako siatkę 8 na 16. Oznaczymy kolumny liczbami 0
do 7
i wierszy liczbami 0
do 15
.
y
--------15
--------14
--------13
--------12
--------11
--------10
--------9
--------8
--------7
--------6
--------5
--------4
--------3
--------2
--------1
--------0
01234567
x
Powyżej: całkowicie spokojna, zwykła rzeka bez przeszkód. Oczywiście nie jest to rzeka, na której płyniesz.
Zaczynasz od współrzędnej (4, 0), a stamtąd poruszasz się w sposób niekontrolowany w górę rzeki (tj. Wektora (0,1)
), aż uderzysz w skałę (reprezentowaną przez o
w tych przykładach jako). Kiedy uderzysz w skałę, będziesz miał 55% szansy na przejście obok skały w lewo (tj. Wektor (-1,1)
) i 45% szansy na przejście obok skały w prawo (tj. Wektor (1,1)
). Jeśli czółno znajduje się na skrajnych lewych lub prawych kolumnach, zawsze przesunie się w kierunku środka. Jeśli nie ma skał, przesunie się prosto w górę.
y
----x---15
----xo--14
-o--x---13
----x---12
---ox---11
---x----10
---xo---9
---ox---8
----xo--7
-----x--6
----ox--5
-o--x---4
----x---3
----xo--2
----x---1
----x---0
01234567
Powyżej: możliwa trasa, którą może płynąć kajak, przedstawiony za pomocą postaci x
Biorąc pod uwagę mapę rzeki, napisz program, który wyświetli prawdopodobieństwo zakończenia czółna w danej kolumnie.
Zaakceptuj dane wejściowe dowolną metodą dogodną dla Twojego programu (np. STDIN, argument wiersza poleceń raw_input()
, odczyt z pliku itp.). Pierwsza część danych wejściowych to pojedyncza liczba całkowita od 0 do 7, reprezentująca kolumnę, dla której program znajdzie prawdopodobieństwo. Poniżej znajduje się lista krotek w formie x,y
reprezentującej pozycję kamieni.
Przykład:
Wkład:
4 4,1 5,5 3,5
Oznaczałoby to rzekę ze skałami w pozycjach (4,1), (5,5) i (3,5) i prosi o prawdopodobieństwo, że kajak zakończy się w czwartej kolumnie.
Wydajność:
0.495
Należy zauważyć, że w tym przykładzie położenia skał były symetryczne, co pozwoliło rozwiązać problem z rozkładem dwumianowym. Nie zawsze tak będzie!
Ponadto rzekę zawsze można pokonywać. Oznacza to, że nigdy nie będzie dwóch skał, które byłyby ustawione poziomo obok siebie. Zobacz komentarz Glenna, aby zobaczyć przykład niemożliwego przypadku.
To jest kod golfowy, więc wygrywa najmniejsza liczba znaków. Jeśli specyfikacja nie jest jasna, możesz zadawać pytania w komentarzach.