Nella teoria dei linguaggi formali e degli automi, uno dei concetti di base è appunto quello di linguaggio formale, che può essere definito come un insieme di parole, dove ogni parola è una sequenza finita di simboli.
Il problema proposto consiste nel determinare se una certa parola appartiene o meno al linguaggio { 0n1n2n, n >= 1 }, dove i simboli sono 0, 1 e 2.
Questo linguaggio è costituito dalle parole nelle quali il numero di 0 è uguale al numero di 1 e al numero di due.
Inoltre, tutti gli 0 di ciascuna parola devono precedere tutti gli 1 della parola, e questi a loro volta devono precedere tutti i 2.
Ad esempio, la parola 001122 appartiene al linguaggio perché ci sono due 0, seguiti da due 1 e da due 2 (n=2).
La parola 000111122220 non vi appartiene in quanto pur essendoci n=4 occorrenze di ciascun simbolo, uno 0 appare dopo gli 1 e i2.
In modo analogo, la parola 00011112222 non vi appartiene perché il numero di 0 è differente da quello degli altri simboli.
Scrivere un programma che riceve un dato elenco di p parole e stabilisce, per ciascuna di esse, se appartiene al suddetto linguaggio.
Dati di input
Il file input.txt è composto da p+1 righe.
- La prima riga contiene un intero positivo che rappresenta p (p <= 10), il numero di parole da analizzare.
- Ciascuna delle successive p righe contiene una delle parole da analizzare.
- Le parole non sono vuote, e la loro massima lunghezza è di 300 caratteri.
Dati di output
Il file output.txt è composto da p righe.
Nella i-esima riga, deve essere riportata l’indicazione SI se la i-esima parola in input appartiene al linguaggio { 0n1n2n, n >= 1 }, oppure l’indicazione NO in caso contrario.
Esempi
input.txt | output.txt | |
---|---|---|
1 | 3 001122 0001112222 000111222 |
SI NO SI |
2 | 2 0000111122220 012 |
NO SI |
Autore/i: A.S. Stankevich, ACM ICPC Team St. Petersburg State University of Information technology, Mechanics and Optics.