0652 – Afișare Fii: Difference between revisions

From Bitnami MediaWiki
Simina (talk | contribs)
Pagină nouă: = Cerința = Se dă vectorul de tați al unui arbore cu rădăcină cu <code>n</code> noduri și <code>k</code> noduri distincte din arbore. Afișați fiii fiecăruia dintre cele <code>k</code> noduri. = Date de intrare = Fișierul de intrare <code>afisarefiiIN.txt</code> conține pe prima linie numărul de noduri <code>n</code>. Pe linia următoare se află vectorul de tați al arborelui, valorile fiind separate prin spații. Linia a trei conține numărul <code>k</code>, i...
 
Simina (talk | contribs)
 
(One intermediate revision by the same user not shown)
Line 6: Line 6:


= Date de ieșire =
= Date de ieșire =
Fișierul de ieșire <code>afisarefiiOUT.txt</code> va conține <code>k</code> linii. Linia <code>i</code> va conține numărul de fii ai lui <code>x[i]</code> urmat de un spațiu și de lista fiilor lui <code>x[i]</code>, separați și ei printr-un spațiu.
Fișierul de ieșire <code>afisarefiiOUT.txt</code> va conține <code>k</code> linii. Linia <code>i</code> va conține numărul de fii ai lui <code>x[i]</code> urmat de un spațiu și de lista fiilor lui <code>x[i]</code>, separați și ei 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 =
= Restricții și precizări =
Line 34: Line 34:
<code>afisarefiiOUT.txt</code>
<code>afisarefiiOUT.txt</code>
  Datele nu corespund restrictiilor impuse
  Datele nu corespund restrictiilor impuse
== Rezolvare ==
<syntaxhighlight lang="python3">
<syntaxhighlight lang="python3">
def verifica_restrictii(n, k):
def verifica_restrictii(n, k):

Latest revision as of 14:54, 27 December 2023

Cerința[edit | edit source]

Se dă vectorul de tați al unui arbore cu rădăcină cu n noduri și k noduri distincte din arbore. Afișați fiii fiecăruia dintre cele k noduri.

Date de intrare[edit | edit source]

Fișierul de intrare afisarefiiIN.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. Linia a trei conține numărul k, iar linia a patra k noduri, x[1], x[2], … , x[k].

Date de ieșire[edit | edit source]

Fișierul de ieșire afisarefiiOUT.txt va conține k linii. Linia i va conține numărul de fii ai lui x[i] urmat de un spațiu și de lista fiilor lui x[i], separați și ei 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 ≤ k ≤ n ≤ 100
  • în vectorul de tați rădăcina este marcată cu 0
  • dacă un nod x[i] nu are fii, linia corespunzătoare din fișierul de ieșire va contine doar valoarea 0

Exemplul 1:[edit | edit source]

afisarefiiIN.txt

8
4 3 0 3 2 1 2 1
4
3 4 7 1

afisarefiiOUT.txt

2 2 4 
1 1 
0 
2 6 8 

Exemplul 2:[edit | edit source]

afisarefiiIN.txt

101
4 3 0 3 2 1 2 1
4
3 4 7 1

afisarefiiOUT.txt

Datele nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python3"> def verifica_restrictii(n, k):

   if not (1 <= k <= n <= 100):
       return "Datele nu corespund restrictiilor impuse"
   return None

def afisare_fii(n, tati, k, noduri_selectate):

   restrictii_mesaj = verifica_restrictii(n, k)
   if restrictii_mesaj:
       return restrictii_mesaj
   rezultat = []
   for nod in noduri_selectate:
       if not (1 <= nod <= n):
           return "Datele nu corespund restrictiilor impuse"
       fii = [i for i, parinte in enumerate(tati, 1) if parinte == nod]
       rezultat.append((len(fii), fii))
   return rezultat
  1. Citirea datelor de intrare

with open("afisarefiiIN.txt", "r") as f:

   n = int(f.readline().strip())
   tati = list(map(int, f.readline().strip().split()))
   k = int(f.readline().strip())
   noduri_selectate = list(map(int, f.readline().strip().split()))
  1. Verificarea restricțiilor și obținerea rezultatului

restrictii_mesaj = verifica_restrictii(n, k) if restrictii_mesaj:

   with open("afisarefiiOUT.txt", "w") as f:
       f.write(restrictii_mesaj)

else:

   rezultat = afisare_fii(n, tati, k, noduri_selectate)
   with open("afisarefiiOUT.txt", "w") as f:
       if isinstance(rezultat, str):
           f.write(rezultat)
       else:
           for nr_fii, fii in rezultat:
               f.write(f"{nr_fii} {' '.join(map(str, fii))}\n")

</syntaxhighlight>