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.