4194 - EchipaFB

From Bitnami MediaWiki
Revision as of 09:09, 12 December 2023 by Mesarosdenisa (talk | contribs) (Pagină nouă: == Cerinta == Într-o şcoală sunt F fete şi B băieţi. Pentru fiecare valoare a lui K de la 1 la F+B, aflaţi în câte moduri se poate alcătui o echipă formată din K elevi, care să conţină un număr impar de fete. == Date de intrare == Programul citește de la tastatură numerele F şi B. == Date de iesire == Programul va afișa pe ecran, pentru fiecare K de la 1 la F+B, numărul de moduri în care putem forma echipa, modulo 998244353. == Restrictii si preciz...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Cerinta

Într-o şcoală sunt F fete şi B băieţi. Pentru fiecare valoare a lui K de la 1 la F+B, aflaţi în câte moduri se poate alcătui o echipă formată din K elevi, care să conţină un număr impar de fete.

Date de intrare

Programul citește de la tastatură numerele F şi B.

Date de iesire

Programul va afișa pe ecran, pentru fiecare K de la 1 la F+B, numărul de moduri în care putem forma echipa, modulo 998244353.

Restrictii si precizari

  • 1 ≤ F,B ≤ 100.000

Exemplul 1

Intrare
3 2
Iesire
Datele introduse corespund restrictiilor impuse
3 6 4 2 1

Exemplul 2

Intrare
-10 7
Iesire
Datele introduse nu corespund restrictiilor impuse


Rezolvare

<syntaxhighlight lang="python3" line="1"> def combinatoriala_modulara(n, k, mod):

   result = 1
   for i in range(k):
       result = (result * (n - i)) % mod
       result = (result * pow(i + 1, mod - 2, mod)) % mod
   return result

def numar_moduri_echipe(F, B):

   mod = 998244353
   result = []
   for K in range(1, F + B + 1):
       numar_fete_impar = min(F, K)
       numar_fete_par = K - numar_fete_impar
       if numar_fete_impar % 2 == 1:
           numar_moduri = (combinatoriala_modulara(F, numar_fete_impar, mod) *
                           combinatoriala_modulara(B, numar_fete_par, mod)) % mod
           result.append(numar_moduri)
       else:
           result.append(0)
   return result

def main():

   # Citirea datelor de intrare de la tastatură
   F = int(input("Numărul de fete (F): "))
   B = int(input("Numărul de băieți (B): "))
   # Calcularea și afișarea rezultatelor
   rezultate = numar_moduri_echipe(F, B)
   for K, numar_moduri in enumerate(rezultate, start=1):
       print(f"Pentru K = {K}, numărul de moduri este {numar_moduri}")

if __name__ == "__main__":

   main()

</syntaxhighlight>

Explicatie

Să notăm cu A,B,C fetele şi cu X,Y băieţii. Pentru K=1 echipele pot fi A, B, respectiv C. Pentru K=2: AX, AY, BX, BY, CX, CY. Pentru K=3: AXY, BXY, CXY, ABC. Pentru K=4: ABCX, ABCY. Pentru K=5: ABCXY.