0640 – NrFii
Cerința[edit | edit source]
Se dă vectorul de tați al unui arbore cu rădăcină cu n
noduri. Determinați nodul din arbore cu număr maxim de fii. Dacă în arbore sunt mai multe noduri cu număr maxim de fii, afișați-le pe toate, în ordine crescătoare.
Date de intrare[edit | edit source]
Fișierul de intrare nrfiiIN.txt
conține pe prima linie numărul de noduri n
. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spații.
Date de ieșire[edit | edit source]
Fișierul de ieșire nrfiiOUT.txt
va conține pe prima linie nodurile din arbore cu număr maxim de fii, în ordine crescătoare, separate printr-un spațiu.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul "Nu corespunde restricțiilor impuse".
Restricții și precizări[edit | edit source]
1 ≤ n ≤ 100
- în vectorul de tați rădăcina este marcată cu
0
Exemplul 1:[edit | edit source]
nrfiiIN.txt
7 4 1 7 0 7 7 1
nrfiiOUT.txt
7
Explicație[edit | edit source]
Nodul 7
are număr maxim de fii, 3
.
Exemplul 2:[edit | edit source]
nrfiiIN.txt
101 4 1 7 0 7 7 1
nrfiiOUT.txt
Datele nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def citeste_arbore(file_path):
with open(file_path, 'r') as file: n = int(file.readline().strip()) tati = list(map(int, file.readline().split())) return n, tati
def verificare_restrictii(n):
if 1 <= n <= 100: return True else: with open("nrfiiOUT.txt", "w") as file_out: file_out.write("Datele nu corespund restrictiilor impuse") return False
def determina_noduri_max_fii(n, tati):
fii = [0] * (n + 1) for tata in tati: if tata != -1: fii[tata] += 1
max_fii = max(fii) noduri_max_fii = [i for i in range(1, n + 1) if fii[i] == max_fii]
return noduri_max_fii
def scrie_rezultat(file_path, noduri_max_fii):
with open(file_path, 'w') as file: if noduri_max_fii: file.write(' '.join(map(str, noduri_max_fii))) else: file.write("Datele nu corespund restrictiilor impuse")
if __name__ == "__main__":
file_input = "nrfiiIN.txt" file_output = "nrfiiOUT.txt"
n, tati = citeste_arbore(file_input)
if verificare_restrictii(n): noduri_max_fii = determina_noduri_max_fii(n, tati) scrie_rezultat(file_output, noduri_max_fii)
</syntaxhighlight>