4194 - EchipaFB
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.