Preliminars:
En aquests preliminars expliquem qué és una seqüència ben-parentitzada sobre (,), i quin és el corresponent parèntesis de tancar per a cada parèntesis d’obrir. Si ja teniu clars aquests conceptes, podeu deixar de llegir els preliminars i anar directament a l’exercici en sí.
Una seqüència ben parentitzada és un string s format amb els caràcters d’obrir i tancar parèntesis, és a dir ( i ), que cumpleix les següents condicions:
Sigui s una seqüència ben parentitzada i sigui i una posició de s a on hi trobem un parèntesi d’obrir (és a dir s[i]==′(′). Sigui j la posició més petita d’entre les que cumpleixen i<j i tals que el substring s[i..j] té tants parentesis d’obrir com de tancar. Resulta que a posició j hi ha d’haver un parèntesis de tancar, i diem que aquest és el corresponent parèntesis de tancar al parèntesis d’obrir que es troba a posició i.
Exercici:
Escriviu un programa que rep seqüències ben-parentitzades d’entrada i les torna a escriure per la sortida, però insertant un número darrera de cada parèntesi de manera que:
Observació: Convé que utilitzeu la classe stack per a resoldre aquest exercici de manera eficient.
Entrada
L’entrada conté un nombre arbitrari de casos, un per línia. Cada cas consisteix en un string ben parentitzat.
Sortida
Per a cada cas, escriviu en una línia el mateix string, però afegint darrera de cada parèntesis un número, de manera que els parèntesis d’obrir estan identificats començant des de 1 i creixentment de un en un, i els seus corresponents parèntesis de tancar estan identificats pels mateixos números.
Observació
Input
() ()() ()()() (()) ((())) (()())(()()) ()(())(()())((()())(()())) (()(())(()())((()())(()())))
Output
(1)1 (1)1(2)2 (1)1(2)2(3)3 (1(2)2)1 (1(2(3)3)2)1 (1(2)2(3)3)1(4(5)5(6)6)4 (1)1(2(3)3)2(4(5)5(6)6)4(7(8(9)9(10)10)8(11(12)12(13)13)11)7 (1(2)2(3(4)4)3(5(6)6(7)7)5(8(9(10)10(11)11)9(12(13)13(14)14)12)8)1
Input
()() (()(()())()) (())() ()()(())(())() ((()()))(()) ((()())(())) ()() ()(()) () (()())() ((()))() (()()) (())()() (())(()) () ((()))() ((((())))) (()())()(()) ()() ()(()(())()) () () () (((()))()()) ()((()))() (())(((())())) (()(())) (())()() (()) ((((()))))() ()(())() ()(()) ((()))((())) ((())) () (()(())())() () (()) ((())) (()())
Output
(1)1(2)2 (1(2)2(3(4)4(5)5)3(6)6)1 (1(2)2)1(3)3 (1)1(2)2(3(4)4)3(5(6)6)5(7)7 (1(2(3)3(4)4)2)1(5(6)6)5 (1(2(3)3(4)4)2(5(6)6)5)1 (1)1(2)2 (1)1(2(3)3)2 (1)1 (1(2)2(3)3)1(4)4 (1(2(3)3)2)1(4)4 (1(2)2(3)3)1 (1(2)2)1(3)3(4)4 (1(2)2)1(3(4)4)3 (1)1 (1(2(3)3)2)1(4)4 (1(2(3(4(5)5)4)3)2)1 (1(2)2(3)3)1(4)4(5(6)6)5 (1)1(2)2 (1)1(2(3)3(4(5)5)4(6)6)2 (1)1 (1)1 (1)1 (1(2(3(4)4)3)2(5)5(6)6)1 (1)1(2(3(4)4)3)2(5)5 (1(2)2)1(3(4(5(6)6)5(7)7)4)3 (1(2)2(3(4)4)3)1 (1(2)2)1(3)3(4)4 (1(2)2)1 (1(2(3(4(5)5)4)3)2)1(6)6 (1)1(2(3)3)2(4)4 (1)1(2(3)3)2 (1(2(3)3)2)1(4(5(6)6)5)4 (1(2(3)3)2)1 (1)1 (1(2)2(3(4)4)3(5)5)1(6)6 (1)1 (1(2)2)1 (1(2(3)3)2)1 (1(2)2(3)3)1