Per aiutarti con questo task, abbiamo preparato delle tracce di soluzione, che includono solo le parti di lettura dell'input e scrittura dell'output (da tastiera e su schermo). Puoi decidere se leggere/scrivere su file decommentando le opportune righe di codice.
- Scarica la traccia in C: palindromo.c
- Scarica la traccia in C++: palindromo.cpp
- Scarica la traccia in Python: palindromo.py
- Scarica la traccia in Java: palindromo.java
- Scarica la traccia in C#: palindromo.cs
- Scarica la traccia in JavaScript: palindromo.html
- Scarica la traccia in JavaScript (Node.js): palindromo.js
Per festeggiare i 40 anni di Monica, Mojito le ha preparato una sorta di caccia al tesoro.
Come ben noto, l'infrastruttura di Milano (la città dove vive Monica) è formata da incroci, numerati da a , e da strade bidirezionali numerate da a che collegano tali incroci. La -esima strada collega gli incroci e .
Mojito ha disseminato una pallina in ciascuna delle strade. Su ogni pallina è impressa una lettera: in particolare, la pallina posta nella -esima strada reca la lettera .
L'obiettivo di Monica è andare (a piedi) dal suo appartamento, che si trova all'incrocio , all'incrocio in cui la aspetta Mojito. Ogni volta che percorre una strada, Monica deve segnare su un foglio la lettera scritta sulla pallina che si trova in quella strada (lasciando la pallina dov'è). Quando raggiunge Mojito, Monica avrà vinto se sul foglio è scritta una parola palindroma (una parola si dice palindroma quando rimane invariata se la si legge al contrario).
Aiuta Monica a vincere il gioco percorrendo il minimo numero possibile di strade, per evitare di infrangere il coprifuoco!
Nota: Il percorso di Monica può passare più volte da uno stesso incrocio o anche da una stessa strada.
La prima riga del file di input contiene un intero , il numero di casi di test. Seguono casi di test, numerati da a . Ogni caso di test è preceduto da una riga vuota.
Ogni caso di test è composto da righe:
Il file di output deve contenere la risposta ai casi di test che sei riuscito a risolvere. Per ogni caso di test che hai risolto, il file di output deve contenere una riga con la dicitura
Case #t: s
dove t
è il numero del caso di test (a partire da ) e il valore s
è la lunghezza minima di un percorso palindromo tra e . Se tale percorso non esiste, s
deve valere .
Nei primi casi di test valgono le seguenti assunzioni aggiuntive:
Input:
3
5 5
0 4
0 1 b
1 3 c
0 2 a
2 1 c
3 4 a
6 5
3 4
0 5 a
4 5 a
3 1 z
2 3 a
0 3 b
4 3
0 2
0 1 o
1 2 i
2 3 i
Output:
Case #1: 4
Case #2: 5
Case #3: -1
Nel primo caso d'esempio il percorso palindromo di lunghezza minima tra i nodi e è , che compone la parola acca
. Esiste un percorso più breve, , che passa per strade ma non è palindromo e quindi non risulta valido.
Nel secondo caso d'esempio la soluzione è il percorso palindromo , per un totale di strade percorse, che compone la parola aabaa
. Si noti come questo percorso passa due volte per la strada che collega gli incroci e .
Nel terzo caso d'esempio, qualunque percorso che collega gli incroci e inizia con la lettera o
e termina con la lettera i
, e pertanto non può essere palindromo.