Knockout è una partita di basket in cui i giocatori a turno sparano. Si gioca come una sequenza di contest a due giocatori, ognuno dei quali ha la possibilità di "buttare giù" uno di quei giocatori.
Supponiamo che i giocatori siano A B C D
e le loro possibilità di sparare e fare un canestro siano 0.1 0.2 0.3 0.4
, indipendentemente dall'altro giocatore nel concorso. I due giocatori in prima linea A
e B
"combattono". Poiché A
va per primo, è il difensore , in pericolo di essere eliminato, ed B
è l' attaccante , e non in pericolo di eliminazione immediata. A
spara per primo. Se A
ce la fa, A
ha difeso con successo e va in fondo alla linea. La linea cambierebbe in B C D A
. Se A
non ce la fa, allora B
spara. Se B
ce la fa, allora A
è fuori e B
va sul retro della linea, quindi la linea diventa C D B
. Se nessuno dei dueA
né ce la B
fa, il processo si ripete, con lo A
scatto di nuovo, fino a quando uno A
o B
fa un canestro.
Supponiamo che la linea sia cambiata in B C D A
( A
era stata difesa con successo). Ora, B
e C
"combatti" con l' B
essere il difensore e l' C
essere l'attaccante. Questo processo si ripete fino a quando rimane una sola persona. Quella persona è il vincitore.
Il tuo compito è calcolare le probabilità di vincita di ogni persona data la possibilità che realizzeranno un paniere.
Input :
Un elenco di numeri, come ad esempio 0.1 0.2
o 0.5 0.5 0.5 0.5
, dove il n ° numero è la possibilità che il n ° giocatore farà un cestino. Puoi prendere questo input nel formato che preferisci, inclusi i parametri di una funzione.
Uscita :
Un elenco di numeri, dove il n ° numero è la possibilità che il n ° giocatore vincerà la partita. I tuoi numeri devono essere precisi con almeno due cifre decimali almeno il 90% delle volte. Ciò significa che è possibile utilizzare un approccio basato sulla simulazione. Tuttavia, se il tuo codice non è basato sulla simulazione (è garantito che restituisca una risposta corretta ad almeno 6 cifre decimali), togli il 30% dal tuo punteggio.
Esempio tra 0.5 0.5
: chiama i giocatori A
e B
. Sia p
la probabilità di una vittoria. A
ha la 2/3
possibilità di difendersi con successo (dal momento che c'è una 1/2
possibilità che A
segna, 1/4
un'occasione che A
manca e B
segna e 1/4
un'occasione che manca e il processo si ripete). Se A
non riesce a difendersi, viene eliminato e B
vince. Se A
difende, allora la linea diventa B A
. Poiché la situazione è simmetrica, la probabilità di A
vincita è (1 - p)
. Noi abbiamo:
p = 2/3 * (1 - p) + 1/3 * 0
. Risolvendo, otteniamo p = 2/5
. L'output dovrebbe essere 2/5 3/5
o 0.4 0.6
.
Non sono abbastanza bravo con probabilità di fare esempi più complessi.
Se hai bisogno di più casi di test, eccone alcuni:
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)