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 De suas chances de arremessar e fazer uma cesta sejam 0.1 0.2 0.3 0.4respectivamente, independentemente do outro jogador na competição. Os dois jogadores na frente da fila Ae B"brigam". Desde que Avai primeiro, ele é o defensor , em risco de ser eliminado, e Bé o atacante , e não em risco de eliminação imediata. Aatira primeiro. Se Afaz, Adefendeu com sucesso, e vai para o fim da linha. A linha mudaria para B C D A. Se Anão conseguir, então Batira. Se o Bfizer, Asai e Bvai para o fim da linha, para que a linha se torne C D B. Se nemAnem o Bfaz, o processo se repete, com o Adisparo novamente, até que um Aou Bfaça uma cesta.
Suponha que a linha tenha sido alterada para B C D A( Ahavia sido defendida com sucesso). Agora, Be C"lute", Bsendo o defensor e Co 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.2ou 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 Ae B. Let pSer a probabilidade de A ganhar. Atem uma 2/3chance de defender com sucesso (já que há uma 1/2chance de Amarcar, uma 1/4chance de Aerrar e Bmarcar e uma 1/4chance de errar e o processo se repetir). Se Anão se defender, ele é nocauteado e Bvence. Se Adefender, a linha se tornará B A. Como a situação é simétrica, a probabilidade de Avitó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/5ou 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)