2072 - GG
Enunț[edit | edit source]
Alex se află în sistemul de coordonate 2D
. Aflându-se în coordonatele (x, y)
, el primește un număr aleator între 1
și 2
(50%
șanse să primească 1
și 50%
șanse să primească 2
). Dacă acest număr este 1
, atunci el se va deplasa în (x + 1, y)
, altfel în (x, y + 1)
.
Cerința[edit | edit source]
Știind că Alex pornește (1, 1)
, se întreabă care este probabilitatea ca acesta să treacă prin (N, M)
.
Date de intrare[edit | edit source]
Programul citește de la tastatură numerele N
și M
.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran numărul P
, reprezentând probabilitatea cerută.
Restricții și precizări[edit | edit source]
1 ≤ N, M ≤ 100000
Exemplul 1[edit | edit source]
Input:
2 3
Output:
0.375
Exemplul 2[edit | edit source]
Input:
99999999999999 2
Output:
Restrictiile nu sunt indeplinite.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def check_restrictions(N, M):
return 1 <= N <= 100000 and 1 <= M <= 100000
def calculate_probability(N, M):
MOD = 10**9 + 7
dp = [[0.0] * (M + 1) for _ in range(N + 1)]
dp[1][1] = 1.0 # Probabilitatea inițială
for i in range(1, N + 1): for j in range(1, M + 1): if i < N: dp[i + 1][j] += 0.5 * dp[i][j] if j < M: dp[i][j + 1] += 0.5 * dp[i][j]
return dp[N][M]
if __name__ == "__main__":
N = int(input("Introduceti valoarea pentru N: ")) M = int(input("Introduceti valoarea pentru M: "))
if not check_restrictions(N, M): print("Restrictiile nu sunt indeplinite.") else: result = calculate_probability(N, M) print(f'{result:.3f}')
</syntaxhighlight>