Attenzione: Questo task ha un tempo limite di 10 minuti per l'invio della soluzione. Una volta richiesto un input, il timer partirà in automatico, e dopo la scadenza non sarà più possibile inviare una soluzione per quell'input. È sempre possibile richiedere un nuovo input, per cui non preoccuparti se il timer scade: dovrai semplicemente richiedere e scaricare un nuovo input.
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: partita.c
- Scarica la traccia in C++: partita.cpp
- Scarica la traccia in Python: partita.py
- Scarica la traccia in Java: partita.java
- Scarica la traccia in C#: partita.cs
- Scarica la traccia in JavaScript: partita.html
Dopo i vari passaggi preparativi del gioco, Dario è finalmente pronto per giocare una partita!
Questa si svolge su un percorso rettilineo formato da caselle, numerate da a . Inizialmente, Dario piazza sulla casella i soldatini che è riuscito a ottenere in precedenza. Lo scopo del gioco è far arrivare almeno un soldatino sulla casella .
Finché c'è almeno un soldatino, Dario può farli avanzare dalla casella su cui si trovano alla casella successiva, . Tuttavia, nel fare ciò uno dei soldatini va sacrificato: per cui, se, prima della mossa, Dario aveva soldatini, dopo la mossa ne ha .
Tuttavia, sul percorso sono presenti dei rinforzi: su ogni casella , con , è presente un rinforzo che consiste di soldatini addizionali. Quando Dario si trova sulla casella , può decidere, subito prima di fare la mossa, se usare il rinforzo. In tal caso, soldatini vengono aggiunti a quelli che aveva già .
Ogni rinforzo costa una gemma rara (sì, nel gioco ci sono le gemme rare), e pertanto Dario vuole usare il minimo numero possibile di rinforzi che gli permetta di vincere la partita. Aiuta Dario a determinare se è possibile vincere la partita, e in tal caso qual è il minimo numero di rinforzi necessari.
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 come segue:
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: x
dove t
è il numero del caso di test (a partire da ) e il valore x
è se Dario non può vincere la partita, altrimenti il minimo numero di rinforzi che deve usare per vincere.
Nei primi casi di test vale .
Input:
3
6 5
0 1 2 1 2 0
7 3
1 0 0 0 0 2 1
10 2
3 2 4 3 4 2 2 4 5 1
Output:
Case #1: 1
Case #2: -1
Case #3: 3
Nel primo caso d'esempio, Dario ha inizialmente 5 soldatini sulla casella 0 e può vincere la partita prendendo un solo rinforzo, giocando nel modo seguente:
Nel secondo caso d'esempio, Dario non può vincere la partita. Infatti, anche prendendo ogni rinforzo sulla strada, si ritroverebbe nella casella 3 con 1 soldatino e senza rinforzi da prendere. Il soldatino morirebbe avanzando alla casella 4, concludendo la partita.
Nel terzo caso d'esempio, la risposta è 3. Questo risultato si può ottenere prendendo i rinforzi sulle caselle 0, 2 e 4.