Нокаут - це баскетбольна гра, в якій гравці по черзі стріляють. Він грається як послідовність змагань для двох гравців, кожен з яких має можливість "вибити" одного з цих гравців.
Припустимо, гравці 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)