3523 - John
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 main():
# Citirea datelor de intrare n = int(input("Introduceti numarul de muncitori (n): ")) m = int(input("Introduceti numarul de case (m): ")) # Initializarea dicționarului lucratori_casa = {}
# Citirea indiciilor caselor pentru fiecare muncitor for i in range(1, n + 1): indici_casa = [int(input(f"Introduceti indicii caselor pentru muncitorul {i}: ")) for _ in range(m)] lucratori_casa[i] = indici_casa
# Cerința 1: Numărul maxim de muncitori care lucrează la aceeași casă max_muncitori_pe_casa = max(len(set(indici)) for indici in zip(*lucratori_casa.values())) print(f"Numarul maxim de muncitori care lucreaza la aceeasi casa este: {max_muncitori_pe_casa}")
# Cerința 2: Numărul maxim de case la care lucrează simultan cel puțin doi muncitori case_lucrate_de_mai_mult_de_un_muncitor = sum(1 for indici in zip(*lucratori_casa.values()) if len(set(indici)) > 1) print(f"Numarul maxim de case la care lucreaza simultan cel putin doi muncitori este: {case_lucrate_de_mai_mult_de_un_muncitor}")
if __name__ == "__main__":
main()
</syntaxhighlight>
Explicatie
Toți cei 3 muncitori lucrează la casa 3. Intersecția dintre oricare 2 muncitori este mai mică sau egală cu 2.