Knockout est un jeu de basket-ball où les joueurs tirent à tour de rôle. Il se joue comme une séquence de compétitions à deux joueurs, chacune ayant la possibilité de "mettre KO" un de ces joueurs.
Supposons que les joueurs le soient A B C D
et que leurs chances de tirer et de faire un panier soient 0.1 0.2 0.3 0.4
respectivement, indépendamment de l'autre joueur du concours. Les deux joueurs en tête de file, A
et B
, "se battent". Depuis A
le premier, il est le défenseur , en danger d'être éliminé, et B
l' attaquant , et non en danger d'élimination immédiate. A
tire en premier. Si le A
fait, A
a défendu avec succès et va au fond de la ligne. La ligne deviendrait B C D A
. Si A
ne le fait pas, B
tire. Si le B
fait, alors A
est sorti et B
va à l'arrière de la ligne, donc la ligne devient C D B
. Si ni l'un ni l'autreA
ni le B
fait, le processus se répète, avec la A
prise de vue à nouveau, jusqu'à ce que soit A
ou B
fait un panier.
Supposons que la ligne soit devenue B C D A
( A
avait réussi à se défendre). Maintenant, B
et C
"combattez", en B
étant le défenseur et en C
étant l'attaquant. Ce processus se répète jusqu'à ce qu'il ne reste qu'une seule personne. Cette personne est la gagnante.
Votre tâche consiste à calculer les probabilités de chaque personne gagnante compte tenu de la chance qu'elle fera un panier.
Entrée :
Une liste des numéros, par exemple 0.1 0.2
ou 0.5 0.5 0.5 0.5
, où le n ième nombre est la chance que le n ième joueur fera un panier. Vous pouvez prendre cette entrée dans le format de votre choix, y compris comme paramètres d'une fonction.
Sortie :
Une liste des numéros, où le n ième nombre est la chance que le n ième joueur gagnera le match. Vos chiffres doivent être précis à au moins deux décimales au moins 90% du temps. Cela signifie que vous pouvez utiliser une approche basée sur la simulation. Cependant, si votre code n'est pas basé sur la simulation (il est garanti de retourner une réponse correcte à au moins 6 décimales), retirez 30% de votre score.
Exemple entre 0.5 0.5
: Appelez les joueurs A
et B
. Soit p
la probabilité de gagner A. A
a une 2/3
chance de défendre avec succès (car il y a une 1/2
chance que les A
scores, une 1/4
chance qui A
manque et B
marque, et une 1/4
chance que les deux manquent et que le processus se répète). S'il A
ne parvient pas à se défendre, il est mis KO et B
gagne. Si A
défend, alors la ligne devient B A
. Puisque la situation est symétrique, la probabilité de A
gagner est (1 - p)
. On a:
p = 2/3 * (1 - p) + 1/3 * 0
. Résoudre, nous obtenons p = 2/5
. La sortie doit être 2/5 3/5
ou 0.4 0.6
.
Je ne suis pas assez bon avec la probabilité de faire des exemples plus complexes.
Si vous avez besoin de plus de cas de test, en voici quelques-uns:
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)