Нокаут - це баскетбольна гра, в якій гравці по черзі стріляють. Він грається як послідовність змагань для двох гравців, кожен з яких має можливість "вибити" одного з цих гравців.
Припустимо, гравці A B C D
та їх шанси вистрілити та зробити кошик 0.1 0.2 0.3 0.4
відповідно, незалежно від іншого гравця у змаганні. Два гравці в передній частині лінії, A
і B
, "битися". Оскільки A
йде першим, він є захисником , загрожує усуненням і B
є нападником , а не загрожує негайним усуненням. A
пагони спочатку. Якщо A
встигає, A
успішно захистився і переходить до тилу рядка. Лінія зміниться на B C D A
. Якщо A
не вдається, то B
стріляє. Якщо B
це встигає, то A
виходить і B
переходить до задньої частини рядка, тому лінія стає C D B
. Якщо ніA
і не B
робить це, процес повторюється, A
знов стріляючи, поки A
або не B
зробить кошик.
Припустимо, рядок змінено на B C D A
( A
успішно захищено). Тепер B
і C
"воюйте", B
будучи захисником і C
бути нападником. Цей процес повторюється, поки не залишиться лише одна людина. Ця людина є переможцем.
Ваше завдання - обчислити ймовірність перемоги кожної людини з урахуванням шансу, що вона зробить кошик.
Вхід :
Список номерів, таких як 0.1 0.2
або 0.5 0.5 0.5 0.5
, де n- го числа є шансом, що n- й гравець зробить кошик. Ви можете взяти цей вхід у будь-якому форматі, який вам подобається, в тому числі як параметри функції.
Вихід :
Список номерів, де n- е число - це шанс, що n- й гравець виграє гру. Ваші цифри повинні бути точними щонайменше до двох знаків після коми, щонайменше, 90% часу. Це означає, що ви можете використовувати підхід на основі моделювання. Однак, якщо ваш код не заснований на симуляції ( гарантовано повернути правильну відповідь принаймні на 6 десяткових знаків), тоді забирайте 30% від вашої оцінки.
Приклад між 0.5 0.5
: Зателефонуйте гравцям A
та B
. Нехай p
буде ймовірність виграшу. A
є 2/3
шанс успішного захисту (оскільки є 1/2
шанс A
забити гол, 1/4
шанс A
пропустити і B
забити, і 1/4
шанс, що пропустить і процес повториться). Якщо A
не вдається захистити, він вибивається і B
виграє. Якщо A
захищає, то лінія стає B A
. Оскільки ситуація симетрична, ймовірність A
виграшу є (1 - p)
. Ми отримуємо:
p = 2/3 * (1 - p) + 1/3 * 0
. Вирішуючи, отримуємо p = 2/5
. Вихід повинен бути 2/5 3/5
або 0.4 0.6
.
Мені недостатньо добре з вірогідністю робити більш складні приклади.
Якщо вам потрібно більше тестових випадків, ось декілька:
0.1 0.2 0.3 0.4 --> 0.01 0.12 0.25 0.62
0.99 0.99 --> 0.5 0.5 (it's not exact, but if you round to two decimal places, you get 0.5 and 0.5)