1460 - Serbare

De la Universitas MediaWiki
Versiunea din 31 octombrie 2023 08:34, autor: AntalKrisztian (discuție | contribuții) (Pagină nouă: == Cerinţa == La o serbare sunt '''n''' grupe de copii care poartă '''p''' tipuri de uniforme. Scrieţi un program care să afişeze pe ecran tipurile de uniforme în ordinea descrescătoare a numărului total de copii ce poartă fiecare tip de uniformă. Afişarea se va face pe o singură linie, valoriile fiind separate printr-un spaţiu. == Date de intrare == Fișierul de intrare '''serbare.in''' conține, pe prima linie, numerele '''n''' şi '''p''', separate printr-un s...)
(dif) ← Versiunea anterioară | Versiunea curentă (dif) | Versiunea următoare → (dif)

Cerinţa

La o serbare sunt n grupe de copii care poartă p tipuri de uniforme. Scrieţi un program care să afişeze pe ecran tipurile de uniforme în ordinea descrescătoare a numărului total de copii ce poartă fiecare tip de uniformă. Afişarea se va face pe o singură linie, valoriile fiind separate printr-un spaţiu.

Date de intrare

Fișierul de intrare serbare.in conține, pe prima linie, numerele n şi p, separate printr-un spaţiu, iar pe următoarele n linii câte două valori separate printr-un spaţiu ce reprezintă numărul de copii dintr-o grupă şi respectiv tipul de uniformă pe care aceştia îl poartă.

Date de ieşire

Fișierul de ieșire serbare.out va conţine tipurile de uniforme în ordinea descrescătoare a numărului total de copii ce poartă fiecare tip de uniformă. Numerele vor fi separate printr-un spaţiu.

Restricții și precizări

  • 1 ⩽ n ⩽ 1000
  • 1 ⩽ p ⩽ 11
  • Numărul de copii dintr-o grupă este cel mult 100
  • Fiecare mărime de uniformă din intervalul [1,p] este purtată de cel puţin un copil

Exemplu

serbare.in
5 3
20 2
20 3
30 2
20 1
10 1
serbare.out
2 1 3

Explicaţii

Tipul 2 de uniformă este purtat de 50 de copii, tipul 1 de 30 de copii, iar tipul 3 de 20 de copii.

Rezolvare

# Deschidem fișierul de intrare
with open('serbare.in', 'r') as intrare:
    # Citim numărul de grupe și tipuri de uniforme
    n, p = map(int, intrare.readline().split())
    
    # Inițializăm un dicționar pentru a stoca numărul total de copii pentru fiecare tip de uniformă
    uni = {i: 0 for i in range(1, p+1)}
    
    # Parcurgem fiecare grup
    for _ in range(n):
        # Citim numărul de copii și tipul de uniformă
        copii, uni_tip = map(int, intrare.readline().split())
        
        # Adăugăm numărul de copii la totalul pentru tipul respectiv de uniformă
        uni[uni_tip] += copii

# Sortăm tipurile de uniforme în ordinea descrescătoare a numărului total de copii
sort_uni = sorted(uni.items(), key=lambda x: x[1], reverse=True)

# Deschidem fișierul de ieșire
with open('serbare.out', 'w') as iesire:
    # Scriem tipurile de uniforme în fișier, separate printr-un spațiu
    iesire.write(' '.join(str(uni[0]) for uni in sort_uni))