3991 - Modifica Paranteze
Cerința[edit | edit source]
Fie un șir de paranteze rotunde, deschise sau închise. Putem efectua de câte ori dorim operația de transformare a unei paranteze deschise într-una închisă sau invers. Să se determine numărul minim de operații necesare transformării secvenței inițiale într-una corect parantezată. Dacă acest lucru nu este posibil, se va afișa -1
.
Date de intrare[edit | edit source]
Programul citește de la tastatură șirul de paranteze rotunde, fără spații.
Date de ieșire[edit | edit source]
Programul va afișa pe ecran numărul minim de operații necesar pentru a transforma șirul într-o secvență corect parantezată. Dacă nu este posibilă parantezarea corectă, se va afișa -1
.
Restricții și precizări[edit | edit source]
1 ≤ numărul de paranteze ≤ 1000
Exemplul 1:[edit | edit source]
Intrare
((((
Ieșire
2
Explicație[edit | edit source]
O posibilitate este să modificăm ultimele două paranteze deschise în paranteze închise și să obținem (())
.
Exemplul 2:[edit | edit source]
Intrare
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
Ieșire
Datele nu corespund restrictiilor impuse.
Rezolvare[edit | edit source]
<syntaxhighlight lang="python3" line="1"> def check_restriction(s):
num_parentheses = s.count('(') + s.count(')') return 1 <= num_parentheses <= 1000
def nr_min_op(s):
cnt = 0 nr_op = 0 n = len(s)
if not check_restriction(s): print("Datele nu corespund restrictiilor impuse.") return -1
if n % 2 == 1: return -1
for i in range(n): if s[i] == '(': cnt += 1 else: cnt -= 1
if cnt < 0: nr_op += 1 cnt = 1
nr_op += cnt // 2 return nr_op
if __name__ == "__main__":
s = input("Introduceti un sir cu paranteze: ")
if check_restriction(s): result = nr_min_op(s) if result != -1: print(result) else: print("Datele nu corespund restrictiilor impuse.")
</syntaxhighlight>