La storia
"2016? Bene ..." brontolò il venditore di giocattoli Hilbert. Aprì gli occhi, si asciugò il condimento per l'insalata che gli colava dall'orecchio e mangiò un cremeschnitte di kick-start al mattino. Vacanze esemplari. Ora ha bisogno di andare a lavorare e finire la contabilità dell'anno.
Il Natale è un periodo molto fruttuoso dell'anno, soprattutto per le sue vendite. Hilbert sa esattamente come funziona: una persona entra in un negozio e acquista il primo regalo che gli viene offerto. Lo pagano e scappano in un altro negozio. In pratica, ciò che il regalo è in realtà non fa davvero la differenza. Anche il prezzo è irrilevante, a condizione che non sia troppo elevato. Tutto dipende dal tempo rimanente fino a Natale: più breve è il tempo, maggiore è il rimorso dei clienti, maggiore è il prezzo che sono disposti a pagare.
Tutto ciò che serve a Hilbert è guardare l'orologio - e sa subito quanto i suoi clienti possono spendere. Può facilmente trarre vantaggio da questo fatto: trova il regalo più costoso che può vendere a un determinato cliente e lo offre a loro. Solo ora si è reso conto di aver dimenticato di usare questa astuzia strategia l'anno scorso. Ma cambierà!
Tuttavia, Hilbert vorrebbe sapere quanto i suoi affari sarebbero fioriti, se avesse effettivamente usato il suo grande schema. È riuscito a mettere insieme un elenco di persone che sono venute nel suo negozio, ma non è sicuro di quanti soldi avrebbe potuto guadagnare con loro.
Il tuo compito (TL; DR)
L'input è costituito da un elenco crescente di prezzi dei regali disponibili e da un elenco dei budget dei clienti. L'elenco dei budget è nello stesso ordine in cui i clienti sono arrivati al negozio, a condizione che ogni cliente sia disposto a pagare almeno quanto il precedente, il che significa che è anche in aumento.
Per ogni cliente, trova il regalo più costoso che è disposto a pagare e genera il suo prezzo. Se non sono disponibili regali all'interno del budget, produrre a 0.
Ottieni un -40%bonus ai personaggi, se la complessità temporale asintotica del tuo algoritmo è O(n+m)(piuttosto che banale O(n*m)) Dove n, msono le lunghezze degli elenchi di input.
Questo è code-golf , vince il byte più corto. Sono vietate le scappatoie standard.
Esempio
Ingresso:
1 2 2 2 5 7 10 20
1 1 2 3 6 6 15 21 21 22
Produzione:
1 0 2 2 5 2 10 20 7 0
Questo compito è stato preso da un concorso di programmazione locale e tradotto da me in inglese. Ecco l'incarico originale: https://www.ksp.sk/ulohy/zadania/1131/