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: mostra.c
- Scarica la traccia in C++: mostra.cpp
- Scarica la traccia in Python: mostra.py
- Scarica la traccia in Rust: mostra.rs
Mojito, il cagnolino di Monica, terrà finalmente una mostra dei fantastici reperti che negli anni ha ritrovato nel suo giardino! Data l'importanza dell'evento, si sono create due lunghe file. Nella prima si sono assiepati turisti, ciascuno con un grado di preparazione . Nella seconda si sono accalcati volontari della scuola d'arte, che si offrono di guidare i turisti attraverso i reperti, ciascuno con un grado di preparazione .
Per l'accesso alla mostra dei turisti sono disponibili due tipi di biglietti: il biglietto senza guida al costo di 1 euro, e il biglietto con guida al costo di 2 euro. I volontari invece non pagano mai, che gli venga assegnato un turista oppure no. La grande calca impedisce di riordinare le persone in fila, ma è comunque possibile decidere il modo con cui far entrare le persone: individualmente da una delle due file, oppure abbinati dalle due file. È sempre possibile far entrare le persone individualmente, ma per mantenere alta la reputazione della mostra, è possibile abbinare un turista di preparazione con una guida di preparazione solo se la guida è più preparata del turista, ovvero se . In caso contrario, il turista si troverebbe a spiegare i dettagli dell'arte di Mojito alla guida, uno smacco troppo grande per il museo!
Per ottenere il massimo profitto possibile, è importante abbinare bene le guide ai turisti, decidendo quali guide e turisti far entrare individualmente, e quali invece abbinare tra loro. Quanto può guadagnare al massimo la mostra dai biglietti, decidendo con cura l'assegnamento di guide ai turisti?
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.
Ciascun caso di test è composto da righe: la prima contiene i due numeri interi ed , rispettivamente il numero di turisti e il numero di volontari. La riga successiva contiene gli interi , i gradi di preparazione dei turisti. La terza riga contiene gli interi , i gradi di preparazione dei volontari.
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
è il massimo guadagno che è possibile ottenere in questo caso di test.
Input:
4
2 5
2 2
1 1 7 2 9
5 3
1 2 3 4 5
3 3 3
3 1
8 6 7
20
2 2
5 1
2 6
Output:
Case #1: 4
Case #2: 7
Case #3: 4
Case #4: 3
Nel primo caso d'esempio sono presenti 2 visitatori e 5 guide. Una soluzione ottima è la seguente:
Notiamo che non è possibile assegnare la prima, la seconda e la quarta guida a nessun turista, perchè nessuna di queste è abbastanza preparata. L'immagine seguente rappresenta la soluzione ottima:
Nel secondo caso d'esempio possiamo comportarci nel seguente modo:
In questo modo guadagniamo euro, che è il massimo possibile.
Nel terzo caso d'esempio l'unica guida disponibile è così preparata da poter accompagnare qualsiasi turista. Possiamo, ad esempio, far entrare insieme la guida e il primo turista, ottenendo euro.
Nel quarto caso d'esempio la soluzione ottima è 3, ed è ottenibile in tre modi:
Nota che non è possibile cambiare l'ordine delle persone, e in particolare non possiamo far entrare la prima guida col secondo turista e il primo turista con la seconda guida, che farebbe guadagnare 4 euro.
Di seguito una delle soluzioni ottime: