Vengono dati un insieme di parole ed un testo. Il testo contiene un messaggio composto da parole (inserite nel testo in modo particolare ed eventualmente ambiguo).
Le parole e il testo sono sequenze di lettere maiuscole e minuscole dell'alfabeto inglese. C'è differenza tra lettere minuscole e maiuscole. La lunghezza di una parola è calcolata nel solito modo: per esempio, la parola CON ha lunghezza 3.
Le lettere di una parola non devono apparire consecutivamente nel testo. Per esempio, se la parola CON è presente nel testo, sarà sempre nella forma CuOvN dove u e v indicano sequenze arbitrarie di lettere (e quindi, eventualmente, vuote). Diremo che CuOvN è una copertura per CON. In generale, una copertura per una parola è una sottosequenza del testo per cui la prima e l'ultima lettera della sottosequenza sono uguali, rispettivamente, alla prima e all'ultima lettera della parola ed è possibile ottenere la parola cancellando alcune (o nessuna) lettere della sottosequenza. Una parola può capitare in una o più coperture o può non essere presente affatto nel testo, e una copertura può coprire più di una parola.
Una copertura è identificata dalla sua posizione iniziale (posizione della sua prima lettera) e dalla sua posizione finale (posizione della sua ultima lettera) nel testo. La prima lettera del testo è in posizione 1. Diciamo che due coperture C1 e C2 non si sovrappongono se la posizione finale di C1 è minore della posizione iniziale di C2 e viceversa.
Per trovare una soluzione è necessario estrarre il messaggio nascosto nel testo. Una soluzione è un insieme di elementi, ognuno dei quali è formato da una parola e da una copertura per quella parola, in modo che le seguenti condizioni siano tutte soddisfatte:
Nel caso ci siano più soluzioni è necessario darne in output una sola.
Ci sono due file di input: words.inp e text.inp. Il file words.inp contiene la lista di parole e text.inp contiene il testo.
Il file di output si chiamerà codes.out.
È garantito che nel testo:
words.inp | text.inp | codes.out |
4 RuN RaBbit HoBbit StoP |
StXRuYNvRuHoaBbvizXztNwRRuuNNP |
12 2 9 21 1 4 7 1 24 28 |
Il messaggio della soluzione è "RuN RaBbit RuN"; un'altra soluzione sarebbe potuta essere "Run HoBbit Run".