0849 - Paranteze2
Cerința[edit | edit source]
Se dă un șir de paranteze rotunde care se închid corect (corect parantezat). Să se determine adâncimea parantezării.
Pentru un șir de paranteze închise corect S, adâncimea parantezării, D(S) este definită astfel:
dacă șirul S este vid, D(S)=0 dacă S=(T), unde T este un șir de paranteze corect, D(S)=1+D(T) dacă S=AB, unde A și B sunt șiruri de paranteze corecte, D(S)=max{D(A),D(B)}
Date de intrare[edit | edit source]
Fișierul de intrare paranteze2in.txt conține pe prima un șir de paranteze rotunde, corect parantezat.
Date de ieșire[edit | edit source]
Fișierul de ieșire paranteze2out.txt va conține pe prima linie un număr M, reprezentând adâncimea parantezării.
Restricții și precizări[edit | edit source]
- șirul va conține cel mult 254 de paranteze
Exemplul 1:[edit | edit source]
paranteze2in.txt
- 1
- ()((()())())
paranteze2out.txt
- Datele de intrare corespund restrictiilor impuse.
- 3
Exemplul 2:[edit | edit source]
paranteze2in.txt
- h
paranteze2out.txt
- Datele de intrare nu corespund restrictiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1" start="1">
def validare(strings): # functia de validare a datelor de intrare
for sir in strings: if len(sir) > 254: raise ValueError file_out.write("Datele de intrare corespund restrictiilor impuse\n")
def adancime_parantezare(sir): # functia de rezolvare
adancime_maxima = 0 adancime_curenta = 0 for paranteza in sir: if paranteza == '(': adancime_curenta += 1 if adancime_curenta > adancime_maxima: adancime_maxima = adancime_curenta elif paranteza == ')': adancime_curenta -= 1 return adancime_maxima
if __name__ == '__main__':
file_in = open('paranteze2in.txt', 'r') file_out = open('paranteze2out.txt', 'w')
try: n = int(file_in.readline().strip()) siruri = [file_in.readline().strip() for _ in range(n)] validare(siruri) rezultate = [adancime_parantezare(sir) for sir in siruri] for rezultat in rezultate: file_out.write(str(rezultat) + '\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>