Nocaute é um jogo de basquete, onde os jogadores se revezam atirando. É jogado como uma sequência de competições para dois jogadores, cada um com a possibilidade de "nocautear" um desses jogadores.
Suponha que os jogadores sejam A B C D
e suas chances de arremessar e fazer uma cesta sejam 0.1 0.2 0.3 0.4
respectivamente, independentemente do outro jogador na competição. Os dois jogadores na frente da fila A
e B
"brigam". Desde que A
vai primeiro, ele é o defensor , em risco de ser eliminado, e B
é o atacante , e não em risco de eliminação imediata. A
atira primeiro. Se A
faz, A
defendeu com sucesso, e vai para o fim da linha. A linha mudaria para B C D A
. Se A
não conseguir, então B
atira. Se o B
fizer, A
sai e B
vai para o fim da linha, para que a linha se torne C D B
. Se nemA
nem o B
faz, o processo se repete, com o A
disparo novamente, até que um A
ou B
faça uma cesta.
Suponha que a linha tenha sido alterada para B C D A
( A
havia sido defendida com sucesso). Agora, B
e C
"lute", B
sendo o defensor e C
o atacante. Esse processo se repete até restar apenas uma pessoa. Essa pessoa é a vencedora.
Sua tarefa é calcular as probabilidades de cada pessoa ganhar, tendo a chance de fazer uma cesta.
Entrada :
Uma lista de números, como 0.1 0.2
ou 0.5 0.5 0.5 0.5
, onde o n º número é a chance de que o n º jogador irá fazer uma cesta. Você pode levar essa entrada em qualquer formato que desejar, incluindo os parâmetros para uma função.
Saída :
Uma lista de números, onde o n º número é a chance de que o n º jogador vai ganhar o jogo. Seus números devem ter precisão de pelo menos duas casas decimais em pelo menos 90% das vezes. Isso significa que você pode usar uma abordagem baseada em simulação. No entanto, se o seu código não for baseado em simulação (é garantido que você retorne uma resposta correta com pelo menos 6 casas decimais), retire 30% da sua pontuação.
Exemplo entre 0.5 0.5
: Ligue para os jogadores A
e B
. Let p
Ser a probabilidade de A ganhar. A
tem uma 2/3
chance de defender com sucesso (já que há uma 1/2
chance de A
marcar, uma 1/4
chance de A
errar e B
marcar e uma 1/4
chance de errar e o processo se repetir). Se A
não se defender, ele é nocauteado e B
vence. Se A
defender, a linha se tornará B A
. Como a situação é simétrica, a probabilidade de A
vitória é (1 - p)
. Nós temos:
p = 2/3 * (1 - p) + 1/3 * 0
. Resolvendo, chegamos p = 2/5
. A saída deve ser 2/5 3/5
ou 0.4 0.6
.
Não sou bom o suficiente com probabilidade de fazer exemplos mais complexos.
Se você precisar de mais casos de teste, aqui estão alguns:
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)