4194 - EchipaFB

De la Universitas MediaWiki

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

MODULO = 998244353

def este_input_valid(F, B):
    return 1 <= F <= 100000 and 1 <= B <= 100000

def calculeaza_moduri(F, B):
    rezultate = []
    total_elevi = F + B

    for K in range(1, total_elevi + 1):
        moduri = 0
        for numar_fete in range(1, min(K, F) + 1, 2):
            numar_baieti = K - numar_fete
            if numar_baieti <= B:
                moduri += 1

        rezultate.append(moduri % MODULO)

    return rezultate

if __name__ == "__main__":
    # Citire date de intrare
    F = int(input("Introduceți numărul de fete (F): "))
    B = int(input("Introduceți numărul de băieți (B): "))

    # Verificare validitate date de intrare
    if not este_input_valid(F, B):
        print("Datele introduse nu corespund restricțiilor impuse.")
    else:
        # Calcul și afișare rezultate
        rezultate = calculeaza_moduri(F, B)
        for K, moduri in enumerate(rezultate, start=1):
            print(f"Pentru K = {K}, numărul de moduri este: {moduri}")

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.