3991 - Modifica Paranteze
De la Universitas MediaWiki
Cerința
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
Programul citește de la tastatură șirul de paranteze rotunde, fără spații.
Date de ieșire
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
1 ≤ numărul de paranteze ≤ 1000
Exemplul 1:
Intrare
((((
Ieșire
2
Explicație
O posibilitate este să modificăm ultimele două paranteze deschise în paranteze închise și să obținem (())
.
Exemplul 2:
Intrare
(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
Ieșire
Datele nu corespund restrictiilor impuse.
Rezolvare
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.")