Fişierul intrare/ieşire:petreceri.in, petreceri.outSursăSummer Challenge 2021
AutorAlexandru Luchianov, Andrei Robert Ion, Stefan Constantin PiscuAdăugată desummer21comisia summer 2k21 summer21
Timp execuţie pe test0.15 secLimită de memorie131072 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Petreceri

După cum ştiţi Rick este un foarte mare iubitor de petreceri. Acesta când merge la o petrecere mereu îşi propune dinainte să bea cel puţin o anumită cantitate de lapte.

Astăzi şi-a notat, în ordinea în care se întâmplă, N petreceri pe calendarul său, fiecare dintre ele cu un număr a[i], numărul de unităţi de lapte pe care vrea să le consume la acea petrecere.

Când a plecat spre prima dintre ele acesta a realizat că şi-a uitat tot laptele în altă dimensiune şi tot ce are este sticla lui goala care poate ţine T unităţi de lichid. Acesta ştie că la fiecare petrecere o unitate de lapte costă c[i] bani (doar nu e prima oara când a mers acolo) aşa că se întreabă care este numaărul minim de bani pe care trebuie sa îi plăteasca ca să îşi îndeplinească minimele propuse, ştiind că între petreceri acesta poate căra doar maxim T unităţi de lapte în sticla sa.

Date de intrare

Prima linie a fişierului de intrare petreceri.in contine numerele N, şi T. Pe următoarea linie apar N numere, al i-lea dintre ele fiind a[i]. Pe a treia linie apar N numere, al i-lea fiind c[i].

Date de ieşire

Pe prima linie a fişierului petreceri.out se va afişa suma minimă de bani care trebuie platită ca Rick să îşi poată îndeplini scopurile.

Restricţii

  • Rick poate merge la petreceri doar în ordinea dată, acesta nevrând să utilizeze călătoria în timp.
  • Rick poate cumpăra lapte la începutul, la finalul, sau oricând în timpul unei petreceri.
  • 0 ≤ T ≤ 109
  • 0 ≤ N ≤ 106
  • 0 ≤ a[i] ≤ T
  • 0 ≤ c[i] ≤ 109
  • Se garantează că soluţia o sa fie mai mică decât 1018
  • Pentru teste in valoare de 10 puncte N, T ≤ 2000
  • Pentru alte teste in valoare de 20 de puncte N ≤ 2000
  • Pentru alte teste in valoare de 30 de puncte N ≤ 200000
  • Pentru alte teste in valoare de 40 de puncte nu există restricţii suplimentare
  • ATENŢIE! Având în vedere testele mari se recomandă parsarea fişierului petreceri.in. Puteţi folosi codul oferit de noi aici (atât pentru utilizatorii de C++ şi sintaxă similară cu fstream, cât şi pentru iubitorii de C pur)

Exemplu

petreceri.inpetreceri.out
5 2
1 1 1 1 1
1 2 3 4 5
8
10 11
9 5 8 8 9 5 6 7 6 5
6 9 6 9 9 9 5 5 5 7
417
18 19
6 6 8 7 7 8 8 6 8 6 9 9 5 9 9 5 5 9
6 8 7 6 7 7 9 5 7 7 5 8 7 5 5 6 8 7
704

Explicaţie

În primul exemplu Rick îşi va cumpăra de la prima petrecere 1 unitate de lapte şi o va bea pe loc, şi îşi va mai cumpăra încă 2 la finalul petrecerii pentru a le lua cu el. La a doua petrecere va bea o unitate de lapte din sticlă şi îşi va cumpăra înca una de la bar. La a treia va face acelaşi lucru, plecând cu sticla plina. La ultimele 2 petreceri îşi va termina laptele din sticlă. Astfel Rick va cumpăra 3 unităţi de la prima petrecere, una de la a doua petrecere si una de la a treia plătind astfel 1+1+1+2+3 = 8 bani.

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?