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 Det que leurs chances de tirer et de faire un panier soient 0.1 0.2 0.3 0.4respectivement, indépendamment de l'autre joueur du concours. Les deux joueurs en tête de file, Aet B, "se battent". Depuis Ale premier, il est le défenseur , en danger d'être éliminé, et Bl' attaquant , et non en danger d'élimination immédiate. Atire en premier. Si le Afait, Aa défendu avec succès et va au fond de la ligne. La ligne deviendrait B C D A. Si Ane le fait pas, Btire. Si le Bfait, alors Aest sorti et Bva à l'arrière de la ligne, donc la ligne devient C D B. Si ni l'un ni l'autreAni le Bfait, le processus se répète, avec la Aprise de vue à nouveau, jusqu'à ce que soit Aou Bfait un panier.
Supposons que la ligne soit devenue B C D A( Aavait réussi à se défendre). Maintenant, Bet 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.2ou 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 Aet B. Soit pla probabilité de gagner A. Aa une 2/3chance de défendre avec succès (car il y a une 1/2chance que les Ascores, une 1/4chance qui Amanque et Bmarque, et une 1/4chance que les deux manquent et que le processus se répète). S'il Ane parvient pas à se défendre, il est mis KO et Bgagne. Si Adéfend, alors la ligne devient B A. Puisque la situation est symétrique, la probabilité de Agagner 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/5ou 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)