Indexar seqüències ben parentitzades

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 ss format amb els caràcters d’obrir i tancar parèntesis, és a dir (( i )), que cumpleix les següents condicions:

Sigui ss una seqüència ben parentitzada i sigui ii una posició de ss a on hi trobem un parèntesi d’obrir (és a dir s[i]==(s[i]=='('). Sigui jj la posició més petita d’entre les que cumpleixen i<ji<j i tals que el substring s[i..j]s[i..j] té tants parentesis d’obrir com de tancar. Resulta que a posició jj 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ó ii.

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ó

Informació del problema

Autoria: PRO2

Generació: 2026-01-25T16:33:26.448Z

© Jutge.org, 2006–2026.
https://jutge.org