1769 - albume

From Bitnami MediaWiki
Revision as of 19:51, 8 January 2024 by Oros Ioana Diana (talk | contribs) (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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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ș.

Restricții și precizări

  • 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.

Exemplu 1

albumein.txt
2 2 2
albumeout.txt
1.666666667


Exemplu 2

albumein.txt
232 654 27
albumeout.txt
25.542102567


Rezolvare

<syntaxhighlight lang="python" line>

  1. 1769 - albume

def calculate_expected_value(C, K, Q):

   expected_value = 0
   for i in range(1, C + 1):
       probability = i / C
       expected_value += probability * min(Q, i * K)
   return expected_value

def check_restrictions(C, K, Q):

   if not (1 <= C <= 1000):
       return False
   if not (1 <= K <= 1000):
       return False
   if not (1 <= Q <= min(1000, C * K)):
       return False
   if K != 1 and Q == C * K:
       return False
   if C * K > 10:
       return False
   return True

def main():

   # Citirea datelor de intrare
   with open('albumein.txt', 'r') as file:
       C, K, Q = map(int, file.readline().split())
   # Verificare restricții
   if not check_restrictions(C, K, Q):
       print("false")
       return
   # Calculul valorii așteptate (expected value)
   result = calculate_expected_value(C, K, Q)
   # Scrierea rezultatului în fișierul de ieșire
   with open('albumeout.txt', 'w') as file:
       file.write('{:.6f}'.format(result))

if __name__ == "__main__":

   main()

</syntaxhighlight>

 Explicatie 

În primul exemplu, există două formații, fiecare cu două albume. Numerotăm albumele în următorul fel:

  • a1 = 1 (primul album al primei formații)
  • a2 = 1 (al doilea album al primei formații)
  • a3 = 2 (primul album al celei de-a doua formații)
  • a4 = 2 (al doilea album al celei de-a doua formații)

Suma numărului de formații din fiecare caz este egală cu 1+2+2+1+2+2+2+2+1+2+2+1 = 20.
Cele 12 cazuri au probabilitate egală de a se întâmpla.
Rezultatul este 20 / 12 = 1.(6)