Le parentesi

Correttore online – Facili

Una sequenza di parentesi tonde ( e ) si definisce ben formata nel modo seguente, come avviene nelle espressioni aritmetiche:

  1. una sequenza vuota è ben formata;
  2. se A e B sono sequenze ben formate, anche (A) e AB sono sequenze ben formate;
  3. ogni altra sequenza di parentesi non è ben formata.

Si chiede di verificare se una sequenza parentesi tonde è ben formata.

Per esempio, ()(()()) è una sequenza ben formata perché A=() e B=(()()) lo sono induttivamente in accordo alle regole suddette: nel primo caso vale A=(A1) dove A1 è vuota; nel secondo, vale B=(A2) dove A2=A3B1, con A3=B1=().

Invece, )( e (()(() non sono ben formate perché sono non vuote ma la regola 2 non può essere applicata.

Scrivere un programma che riceve una sequenza parentesi tonde e stabilisce se è ben formata o meno.

Dati di input

Il file input.txt è composto da un’unica riga contenente una sequenza di parentesi tonde, di lunghezza non nulla e comunque non superiore a 2000.

Dati di output

Il file output.txt è composto da una sola riga contenente l’indicazione CORRECT se la sequenza è ben formata, oppure INCORRECT altrimenti.

Esempi di input/output

input.txt output.txt
(((()())())) CORRECT
()())(() INCORRECT

Autore/i: A.S. Stankevich, ACM ICPC Team St. Petersburg State University of Information technology, Mechanics and Optics.


/*
    www.valcon.it
	OII - Esercizi facili - Le parentesi
*/

#include 
#include 
#include 
using namespace std;

int main()
{
	ifstream fin ( "input.txt");
	ofstream fout("output.txt");
	
	string s;
	int    n,pareggio,p;
	
	fin >> s;	
	n=s.length();
	pareggio=0;
	p=0;
	while(pareggio >= 0 && p < n)
	{
	         if(s[p] == '(')  pareggio++;		
		else if(s[p] == ')')  pareggio--;
		p++;
	}
	
	if(pareggio == 0) fout << "CORRECT";
	else              fout << "INCORRECT";
	
	return 0;
}

Lascia un commento