1460 - Serbare

From Bitnami MediaWiki
Revision as of 08:34, 31 October 2023 by AntalKrisztian (talk | contribs) (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...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

<syntaxhighlight lang="python" line>

  1. 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
  1. 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)

  1. 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))

</syntaxhighlight>