Dados cuatro enteros p , q , r y s . Dos jugadores están jugando un juego en el que ambos jugadores dan en el blanco y el primer jugador que da en el blanco gana el juego. La probabilidad de que el primer jugador dé en el blanco es p/q y la del segundo jugador es r/s . La tarea es encontrar la probabilidad de que el primer jugador gane el juego.
Ejemplos:
Entrada: p = 1, q = 4, r = 3, s = 4
Salida: 0,307692308Entrada: p = 1, q = 2, r = 1, s = 2
Salida: 0,666666667
Aproximación: La probabilidad de que el primer jugador dé en el blanco es p/q y fallar el blanco es 1 – p/q .
La probabilidad de que el segundo jugador dé en el blanco es de r/s y de que no lo haga es de 1 – r/s .
Sea x el primer jugador y y el segundo jugador .
Así que la probabilidad total será x ganado + (x perdido * y perdido * x ganado) + (x perdido * y perdido * x perdido * y perdido * x ganado) +… así sucesivamente .
Como x puede ganar en cualquier turno, es una secuencia infinita.
Sea t = (1 – p / q) * (1 – r / s) . Aquí t < 1 comop/q y r/s son siempre <1 .
Entonces la serie se convertirá en, p / q + (p / q) * t + (p / q) * t 2 + …
Esta es una serie GP infinita con una razón común menor que 1 y su suma será (p / q) / (1 – t) .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to return the probability of the winner double find_probability(double p, double q, double r, double s) { double t = (1 - p / q) * (1 - r / s); double ans = (p / q) / (1 - t); return ans; } // Driver Code int main() { double p = 1, q = 2, r = 1, s = 2; // Will print 9 digits after the decimal point cout << fixed << setprecision(9) << find_probability(p, q, r, s); return 0; }
Java
// Java implementation of the approach import java.util.*; import java.text.DecimalFormat; class solution { // Function to return the probability of the winner static double find_probability(double p, double q, double r, double s) { double t = (1 - p / q) * (1 - r / s); double ans = (p / q) / (1 - t); return ans; } // Driver Code public static void main(String args[]) { double p = 1, q = 2, r = 1, s = 2; // Will print 9 digits after the decimal point DecimalFormat dec = new DecimalFormat("#0.000000000"); System.out.println(dec.format(find_probability(p, q, r, s))); } } // This code is contributed by // Surendra_Gangwar
Python3
# Python3 implementation of the approach # Function to return the probability # of the winner def find_probability(p, q, r, s) : t = (1 - p / q) * (1 - r / s) ans = (p / q) / (1 - t); return round(ans, 9) # Driver Code if __name__ == "__main__" : p, q, r, s = 1, 2, 1, 2 # Will print 9 digits after # the decimal point print(find_probability(p, q, r, s)) # This code is contributed by Ryuga
C#
// C# implementation of the approach using System; class GFG { // Function to return the probability of the winner static double find_probability(double p, double q, double r, double s) { double t = (1 - p / q) * (1 - r / s); double ans = (p / q) / (1 - t); return ans; } // Driver Code public static void Main() { double p = 1, q = 2, r = 1, s = 2; Console.WriteLine(find_probability(p, q, r, s)); } } // This code is contributed by // anuj_67..
PHP
<?php // PHP implementation of the approach // Function to return the probability // of the winner function find_probability($p, $q, $r, $s) { $t = (1 - $p / $q) * (1 - $r / $s); $ans = ($p / $q) / (1 - $t); return $ans; } // Driver Code $p = 1; $q = 2; $r = 1; $s = 2; // Will print 9 digits after // the decimal point $res = find_probability($p, $q, $r, $s); $update = number_format($res, 7); echo $update; // This code is contributed by Rajput-Ji ?>
Javascript
<script> // Javascript implementation of the approach // Function to return the probability of the winner function find_probability(p, q, r, s) { var t = (1 - p / q) * (1 - r / s); var ans = (p / q) / (1 - t); return ans; } // Driver Code var p = 1, q = 2, r = 1, s = 2; // Will print 9 digits after the decimal point document.write( find_probability(p, q, r, s).toFixed(9)); </script>
0.666666667
Complejidad de tiempo: O(1)
Espacio Auxiliar: O(1)