3523 - John: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
== Cerinta == | == Cerinta == | ||
Un canadian deține o firmă cu n muncitori. Fiecare din aceștia lucrează la m case, codificate prin numere naturale. Canadianul dorește să afle: | Un canadian deține o firmă cu '''n''' muncitori. Fiecare din aceștia lucrează la '''m''' case, codificate prin numere naturale. Canadianul dorește să afle: | ||
:1) numărul maxim de muncitori care lucrează la aceeași casă | :1) numărul maxim de muncitori care lucrează la aceeași casă | ||
Line 8: | Line 8: | ||
== Date de intrare == | == Date de intrare == | ||
Programul citește de la tastatură numerele n, m, iar apoi n * m numere naturale. Primele m numere reprezintă indicii caselor la care lucrează muncitorul 1, următoarele m numere reprezintă indicii caselor la care lucrează muncitorul 2, …, ultimele m numere reprezintă indicii caselor la care lucrează muncitorul n. | Programul citește de la tastatură numerele '''n, m''', iar apoi '''n * m''' numere naturale. Primele '''m''' numere reprezintă indicii caselor la care lucrează muncitorul 1, următoarele '''m''' numere reprezintă indicii caselor la care lucrează muncitorul 2, …, ultimele m numere reprezintă indicii caselor la care lucrează muncitorul n. | ||
== Date de iesire == | == Date de iesire == | ||
Line 16: | Line 16: | ||
== Restrictii si precizari == | == Restrictii si precizari == | ||
*n, m, numărul de case la care se lucrează sunt mai mici decât 1.001 | *'''n, m''', numărul de case la care se lucrează sunt mai mici decât '''1.001''' | ||
*cele n * m numere citite vor fi mai mici decât 1.000.000.001 | *cele '''n * m''' numere citite vor fi mai mici decât '''1.000.000.001''' | ||
== Exemplul 1 == | == Exemplul 1 == | ||
Line 26: | Line 26: | ||
:3 4 5 | :3 4 5 | ||
;Iesire | ;Iesire | ||
:Datele introduse corespund restrictiilor impuse | |||
:3 | :3 | ||
:2 | :2 | ||
Line 37: | Line 37: | ||
:-3 9 10.7 | :-3 9 10.7 | ||
;Iesire | ;Iesire | ||
:Datele introduse nu corespund restrictiilor impuse | |||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python3" line="1"> | <syntaxhighlight lang="python3" line="1"> | ||
def | def max_muncitori_pe_o_casa(numar_muncitori, indici_case): | ||
frecventa_case = {} | |||
for indice_casa in indici_case: | |||
if indice_casa not in frecventa_case: | |||
frecventa_case[indice_casa] = 0 | |||
frecventa_case[indice_casa] += 1 | |||
return max(frecventa_case.values()) | |||
def max_case_cu_muncitori(n, m, indici_case_muncitori): | |||
frecventa_case = {} | |||
for indici_case in indici_case_muncitori: | |||
for indice_casa in indici_case: | |||
if indice_casa not in frecventa_case: | |||
frecventa_case[indice_casa] = 0 | |||
frecventa_case[indice_casa] += 1 | |||
numar_maxim_case = 0 | |||
for frecventa in frecventa_case.values(): | |||
if frecventa >= 2: | |||
numar_maxim_case += 1 | |||
return numar_maxim_case | |||
# Citire date de intrare | |||
n = int(input("Introduceti numarul de muncitori (n): ")) | |||
m = int(input("Introduceti numarul de case (m): ")) | |||
indici_case_muncitori = [] | |||
for i in range(n): | |||
indici_casa_muncitor = list(map(int, input(f"Introduceti indicii caselor pentru muncitorul {i + 1}, separati prin spatiu: ").split())) | |||
indici_case_muncitori.append(indici_casa_muncitor) | |||
# Calcul si afisare raspunsuri | |||
max_muncitori_pe_o_casa_result = max_muncitori_pe_o_casa(n, indici_case_muncitori[0]) | |||
max_case_cu_muncitori_result = max_case_cu_muncitori(n, m, indici_case_muncitori) | |||
print(f"Numarul maxim de muncitori care lucreaza la aceeasi casa este: {max_muncitori_pe_o_casa_result}") | |||
print(f"Numarul maxim de case la care lucreaza simultan cel putin doi muncitori este: {max_case_cu_muncitori_result}") | |||
</syntaxhighlight> | </syntaxhighlight> |
Revision as of 11:02, 27 December 2023
Cerinta
Un canadian deține o firmă cu n muncitori. Fiecare din aceștia lucrează la m case, codificate prin numere naturale. Canadianul dorește să afle:
- 1) numărul maxim de muncitori care lucrează la aceeași casă
- 2) numărul maxim de case la care lucreaza simultan cel putin doi muncitori
Date de intrare
Programul citește de la tastatură numerele n, m, iar apoi n * m numere naturale. Primele m numere reprezintă indicii caselor la care lucrează muncitorul 1, următoarele m numere reprezintă indicii caselor la care lucrează muncitorul 2, …, ultimele m numere reprezintă indicii caselor la care lucrează muncitorul n.
Date de iesire
Programul va afișa pe ecran raspunsurile la cele două cerințe.
Restrictii si precizari
- n, m, numărul de case la care se lucrează sunt mai mici decât 1.001
- cele n * m numere citite vor fi mai mici decât 1.000.000.001
Exemplul 1
- Intrare
- 3 3
- 1 2 3
- 2 3 4
- 3 4 5
- Iesire
- Datele introduse corespund restrictiilor impuse
- 3
- 2
Exemplul 2
- Intrare
- 3 3
- 5.2 100 7.9
- 0 2 17
- -3 9 10.7
- Iesire
- Datele introduse nu corespund restrictiilor impuse
Rezolvare
<syntaxhighlight lang="python3" line="1"> def max_muncitori_pe_o_casa(numar_muncitori, indici_case):
frecventa_case = {} for indice_casa in indici_case: if indice_casa not in frecventa_case: frecventa_case[indice_casa] = 0 frecventa_case[indice_casa] += 1
return max(frecventa_case.values())
def max_case_cu_muncitori(n, m, indici_case_muncitori):
frecventa_case = {} for indici_case in indici_case_muncitori: for indice_casa in indici_case: if indice_casa not in frecventa_case: frecventa_case[indice_casa] = 0 frecventa_case[indice_casa] += 1
numar_maxim_case = 0 for frecventa in frecventa_case.values(): if frecventa >= 2: numar_maxim_case += 1
return numar_maxim_case
- Citire date de intrare
n = int(input("Introduceti numarul de muncitori (n): ")) m = int(input("Introduceti numarul de case (m): "))
indici_case_muncitori = [] for i in range(n):
indici_casa_muncitor = list(map(int, input(f"Introduceti indicii caselor pentru muncitorul {i + 1}, separati prin spatiu: ").split())) indici_case_muncitori.append(indici_casa_muncitor)
- Calcul si afisare raspunsuri
max_muncitori_pe_o_casa_result = max_muncitori_pe_o_casa(n, indici_case_muncitori[0]) max_case_cu_muncitori_result = max_case_cu_muncitori(n, m, indici_case_muncitori)
print(f"Numarul maxim de muncitori care lucreaza la aceeasi casa este: {max_muncitori_pe_o_casa_result}") print(f"Numarul maxim de case la care lucreaza simultan cel putin doi muncitori este: {max_case_cu_muncitori_result}")
</syntaxhighlight>
Explicatie
Toți cei 3 muncitori lucrează la casa 3. Intersecția dintre oricare 2 muncitori este mai mică sau egală cu 2.