4194 - EchipaFB: Difference between revisions
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... |
|||
(4 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== Cerinta == | == 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. | Î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 == | == Date de intrare == | ||
Programul citește de la tastatură numerele F şi B. | Programul citește de la tastatură numerele '''F''' şi '''B'''. | ||
== Date de iesire == | == 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. | 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 == | == Restrictii si precizari == | ||
*1 | *1 ⩽ F,B ⩽ 100.000 | ||
== Exemplul 1 == | == Exemplul 1 == | ||
;Intrare | ;Intrare | ||
:3 2 | |||
;Iesire | ;Iesire | ||
;Datele introduse corespund restrictiilor impuse | ;Datele introduse corespund restrictiilor impuse | ||
:3 6 4 2 1 | |||
== Exemplul 2 == | == Exemplul 2 == | ||
;Intrare | ;Intrare | ||
:-10 7 | |||
;Iesire | ;Iesire | ||
:Datele introduse nu corespund restrictiilor impuse | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python3" line="1"> | <syntaxhighlight lang="python3" line="1"> | ||
MODULO = 998244353 | |||
def | 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 | |||
# | |||
F = int(input(" | if __name__ == "__main__": | ||
B = int(input(" | # 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}") | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Latest revision as of 11:24, 29 December 2023
Cerinta[edit | edit source]
Î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[edit | edit source]
Programul citește de la tastatură numerele F şi B.
Date de iesire[edit | edit source]
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[edit | edit source]
- 1 ⩽ F,B ⩽ 100.000
Exemplul 1[edit | edit source]
- Intrare
- 3 2
- Iesire
- Datele introduse corespund restrictiilor impuse
- 3 6 4 2 1
Exemplul 2[edit | edit source]
- Intrare
- -10 7
- Iesire
- Datele introduse nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> 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}")
</syntaxhighlight>
Explicatie[edit | edit source]
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.