1769 - albume: Difference between revisions
Pagină nouă: 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. <br> 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. <br> Care va fi media aritmetică a valorilo... |
No edit summary |
||
Line 1: | Line 1: | ||
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. | Tudoraș are o pasiune pentru muzică. El deține câte <code>K</code> albume din discografia fiecăreia dintre cele <code>C</code> formații pe care le ascultă. În fiecare zi, Tudoraș extrage la întamplare exact <code>Q</code> 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. | 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 <code>albumeIN.txt</code> conține pe prima linie trei valori separate prin spațiu: <code>C K Q</code>. | |||
= Date de ieșire = | |||
Fișierul <code>albumeOUT.txt</code> 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 = | |||
* <code>1 ≤ C, K ≤ 1000</code> | |||
* <code>1 ≤ Q ≤ min(1000, C*K)</code> | |||
* Pentru teste în valoare de 10 puncte, <code>K = 1</code>. | |||
* Pentru alte teste în valoare de 10 puncte, <code>Q = C * K</code>. | |||
* Pentru alte teste în valoare de 20 de puncte, <code>C * K ≤ 10</code>. | |||
* În fiecare zi, toate albumele au probabilitate egală de a fi extrase. | |||
* Rezultatul este considerat corect dacă are o eroare absolută de cel mult <code>10-6</code>. | |||
= Exemplul 1 = | |||
<code>albumeIN.txt</code> | |||
2 2 2 | |||
<code>albumeOUT.txt</code> | |||
1.666666667 | |||
= Exemplul 2 = | |||
<code>albumeIN.txt</code> | |||
232 654 27 | |||
<code>albumeOUT.txt</code> | |||
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__": | if __name__ == "__main__": | ||
Line 75: | Line 65: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 14:40, 18 May 2024
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>