1769 - albume
Tudoraș are o pasiune pentru muzică. El deține câte K
albume din discografia fiecăreia dintre cele C
formații pe care le ascultă. În fiecare zi, Tudoraș extrage la întamplare exact Q
albume din colecția sa, pe care le ascultă în cursul zilei.
La finalul zilei, Tudoraș analizează albumele ascultate. Concret, el numără de la câte formații diferite provin cele Q albume alese și își notează această valoare.
Care va fi media aritmetică a valorilor notate, dacă procesul se repetă pentru un număr infinit de zile? Cu alte cuvinte, care este valoarea medie (expected value) a numărului de formații ascultate într-o zi?
Date de intrare[edit | edit source]
Fișierul albumeIN.txt
conține pe prima linie trei valori separate prin spațiu: C K Q
.
Date de ieșire[edit | edit source]
Fișierul albumeOUT.txt
trebuie să conțină pe prima linie o singură valoare reală: media aritmetică a valorilor notate de Tudoraș. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Datele nu corespund restrictiilor impuse".
Restricții și precizări[edit | edit source]
1 ≤ C, K ≤ 1000
1 ≤ Q ≤ min(1000, C*K)
- Pentru teste în valoare de 10 puncte,
K = 1
. - Pentru alte teste în valoare de 10 puncte,
Q = C * K
. - Pentru alte teste în valoare de 20 de puncte,
C * K ≤ 10
. - În fiecare zi, toate albumele au probabilitate egală de a fi extrase.
- Rezultatul este considerat corect dacă are o eroare absolută de cel mult
10-6
.
Exemplul 1[edit | edit source]
albumeIN.txt
2 2 2
albumeOUT.txt
1.666666667
Exemplul 2[edit | edit source]
albumeIN.txt
232 654 27
albumeOUT.txt
25.542102567
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1"> def verifica_restrictii(c, k, q):
if 1 <= c <= 1000 and 1 <= k <= 1000 and 1 <= q <= min(1000, c * k): return True return False
def main():
try: with open("albumeIN.txt", "r") as fin: c, k, q = map(int, fin.readline().split()) if not verifica_restrictii(c, k, q): with open("albumeOUT.txt", "w") as fout: fout.write("Datele nu corespund restrictiilor impuse") return a = 1.0 for i in range(q): a *= (k * (c - 1.0) - i) / (k * c - i) rezultat = (1.0 - a) * c with open("albumeOUT.txt", "w") as fout: fout.write(f"{rezultat:.9f}") except Exception as e: with open("albumeOUT.txt", "w") as fout: fout.write(f"Eroare: {str(e)}")
if __name__ == "__main__":
main()
</syntaxhighlight>