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
Fișierul albumeIN.txt conține pe prima linie trei valori separate prin spațiu: C K Q.
Date de ieșire
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
1 ≤ C, K ≤ 10001 ≤ 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
albumeIN.txt
2 2 2
albumeOUT.txt
1.666666667
Exemplul 2
albumeIN.txt
232 654 27
albumeOUT.txt
25.542102567
Rezolvare
<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>