1460 - Serbare: Difference between revisions
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... |
No edit summary |
||
Line 2: | Line 2: | ||
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. | 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 == | == Date de intrare == | ||
Fișierul de intrare ''' | Fișierul de intrare '''serbarein.txt''' 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 == | == Date de ieşire == | ||
Fișierul de ieșire ''' | Fișierul de ieșire '''serbareout.txt''' 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 == | == Restricții și precizări == | ||
* 1 ⩽ n ⩽ 1000 | * 1 ⩽ n ⩽ 1000 | ||
Line 10: | Line 10: | ||
* Numărul de copii dintr-o grupă este cel mult '''100''' | * 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 | * Fiecare mărime de uniformă din intervalul '''[1,p]''' este purtată de cel puţin un copil | ||
== | == Exemplul 1 == | ||
; | ; serbarein.txt | ||
: 5 3 | : 5 3 | ||
: 20 2 | : 20 2 | ||
Line 18: | Line 18: | ||
: 20 1 | : 20 1 | ||
: 10 1 | : 10 1 | ||
; | ; serbareout.txt | ||
: Datele de intrare corespund restrictiilor impuse. | |||
: 2 1 3 | : 2 1 3 | ||
<br> | |||
== Exemplul 2 == | |||
; serbarein.txt | |||
: 3 3 | |||
: 20 q | |||
: 20 3 | |||
: 30 3000 | |||
; serbareout.txt | |||
: Datele de intrare nu corespund restrictiilor impuse. | |||
<br> | |||
== Explicaţii == | == 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. | Tipul '''2''' de uniformă este purtat de '''50''' de copii, tipul '''1''' de '''30''' de copii, iar tipul '''3 '''de '''20''' de copii. | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
# | # 1460 Serbare | ||
def validare(n_validare, p_validare, grupe_validare): | |||
# | if n_validare < 1 or n_validare > 1000: # Verificăm dacă n este în intervalul 1-1000 | ||
raise ValueError # Ridicăm o eroare dacă n nu este în intervalul 1-1000 | |||
if p_validare < 1 or p_validare > 11: # Verificăm dacă p este în intervalul 1-11 | |||
raise ValueError # Ridicăm o eroare dacă p nu este în intervalul 1-11 | |||
for grup in grupe_validare: # Parcurgem lista de grupe | |||
# Verificăm dacă numărul de copii este în intervalul 1-100 | |||
# | if grup[0] < 1 or grup[0] > 100: | ||
for | raise ValueError | ||
# | # Verificăm dacă tipul de uniformă este în intervalul 1-p | ||
if grup[1] < 1 or grup[1] > p_validare: | |||
raise ValueError | |||
file_out.write("Datele de intrare corespund restrictiilor impuse.\n") | |||
def uniforme(grupe): | |||
uni = {} # Inițializăm un dicționar gol | |||
for grup in grupe: # Parcurgem lista de grupe | |||
# Dacă tipul de uniformă nu se află încă în dicționar, îl adăugăm cu valoarea 0 | |||
if grup[1] not in uni: | |||
uni[grup[1]] = 0 | |||
# Adăugăm numărul de copii la totalul pentru tipul respectiv de uniformă | # Adăugăm numărul de copii la totalul pentru tipul respectiv de uniformă | ||
uni[ | uni[grup[1]] += grup[0] | ||
# 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) | |||
return [uni[0] for uni in sort_uni] # Returnăm tipurile de uniforme sortate | |||
if __name__ == '__main__': | |||
file_in = open("serbarein.txt", "r") | |||
file_out = open("serbareout.txt", "w") | |||
# | try: | ||
# Citim numărul de grupe și tipuri de uniforme | |||
n_main, p_main = map(int, file_in.readline().split()) | |||
# Citim datele pentru fiecare grup | |||
grupe_main = [list(map(int, file_in.readline().split())) for _ in range(n_main)] | |||
# Validăm datele de intrare | |||
validare(n_main, p_main, grupe_main) | |||
# Calculăm numărul total de copii pentru fiecare tip de uniformă | |||
rezultat_main = uniforme(grupe_main) | |||
# Scriem tipurile de uniforme în fișierul de ieșire, separate printr-un spațiu | |||
file_out.write(' '.join(str(uni) for uni in rezultat_main) + '\n') | |||
except ValueError: | |||
file_out.write("Datele de intrare nu corespund restrictiilor impuse.") | |||
except IndexError: | |||
file_out.write("Datele de intrare nu corespund restrictiilor impuse.") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 15:04, 11 November 2023
Cerinţa[edit | edit source]
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[edit | edit source]
Fișierul de intrare serbarein.txt 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[edit | edit source]
Fișierul de ieșire serbareout.txt 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[edit | edit source]
- 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
Exemplul 1[edit | edit source]
- serbarein.txt
- 5 3
- 20 2
- 20 3
- 30 2
- 20 1
- 10 1
- serbareout.txt
- Datele de intrare corespund restrictiilor impuse.
- 2 1 3
Exemplul 2[edit | edit source]
- serbarein.txt
- 3 3
- 20 q
- 20 3
- 30 3000
- serbareout.txt
- Datele de intrare nu corespund restrictiilor impuse.
Explicaţii[edit | edit source]
Tipul 2 de uniformă este purtat de 50 de copii, tipul 1 de 30 de copii, iar tipul 3 de 20 de copii.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1460 Serbare
def validare(n_validare, p_validare, grupe_validare):
if n_validare < 1 or n_validare > 1000: # Verificăm dacă n este în intervalul 1-1000 raise ValueError # Ridicăm o eroare dacă n nu este în intervalul 1-1000 if p_validare < 1 or p_validare > 11: # Verificăm dacă p este în intervalul 1-11 raise ValueError # Ridicăm o eroare dacă p nu este în intervalul 1-11 for grup in grupe_validare: # Parcurgem lista de grupe # Verificăm dacă numărul de copii este în intervalul 1-100 if grup[0] < 1 or grup[0] > 100: raise ValueError # Verificăm dacă tipul de uniformă este în intervalul 1-p if grup[1] < 1 or grup[1] > p_validare: raise ValueError file_out.write("Datele de intrare corespund restrictiilor impuse.\n")
def uniforme(grupe):
uni = {} # Inițializăm un dicționar gol for grup in grupe: # Parcurgem lista de grupe # Dacă tipul de uniformă nu se află încă în dicționar, îl adăugăm cu valoarea 0 if grup[1] not in uni: uni[grup[1]] = 0 # Adăugăm numărul de copii la totalul pentru tipul respectiv de uniformă uni[grup[1]] += grup[0] # 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) return [uni[0] for uni in sort_uni] # Returnăm tipurile de uniforme sortate
if __name__ == '__main__':
file_in = open("serbarein.txt", "r") file_out = open("serbareout.txt", "w")
try: # Citim numărul de grupe și tipuri de uniforme n_main, p_main = map(int, file_in.readline().split()) # Citim datele pentru fiecare grup grupe_main = [list(map(int, file_in.readline().split())) for _ in range(n_main)] # Validăm datele de intrare validare(n_main, p_main, grupe_main) # Calculăm numărul total de copii pentru fiecare tip de uniformă rezultat_main = uniforme(grupe_main) # Scriem tipurile de uniforme în fișierul de ieșire, separate printr-un spațiu file_out.write(' '.join(str(uni) for uni in rezultat_main) + '\n')
except ValueError: file_out.write("Datele de intrare nu corespund restrictiilor impuse.") except IndexError: file_out.write("Datele de intrare nu corespund restrictiilor impuse.")
</syntaxhighlight>