O firmă producătoare de software organizează un interviu pentru ocuparea unui post de programator, la care s-au prezentat candidaţi. Aceştia sunt ordonaţi în funcţie de momentul la care şi-au trimis CV-ul şi numerotaţi cu numere consecutive de la la . Fiecărui candidat i-a fost realizat în prealabil un profil psihologic şi i s-a determinat nivelul de agitaţie provocat de interviul care urmează să aibă loc, precum şi un sens (crescător sau descrescător) de modificare a acestui nivel. Astfel, la ora la care s-a anunţat începerea interviului (pe care o vom considera momentul ), fiecare candidat are un nivel de agitaţie iniţial.
Pentru fiecare unitate de timp după momentul şi până în momentul în care candidatul este invitat pentru interviu (până atunci el trebuind să aştepte), nivelul său de agitaţie se modifică cu : pentru o parte din candidaţi nivelul creşte cu unitate, iar pentru ceilalţi nivelul scade cu unitate. Dacă nivelul de agitaţie a unui candidat ajunge la , din acel moment, pentru fiecare unitate de timp următoare, nivelul de agitaţie va creşte cu (se schimbă sensul de modificare a nivelului de agitaţie).
Firma va invita candidaţii la interviu în grupuri, în ordinea numerotării (toţi candidaţii având numere de ordine mai mici decât un candidat vor fi invitaţi într-un grup anterior sau în acelaşi grup cu candidatul ).
Înainte de a invita un grup, comisia ce conduce interviul poate decide să aştepte un număr întreg de unităţi de timp (zero sau mai multe). Pentru un grup, durata interviului se consideră neglijabilă (fiecare candidat trebuie doar să răspundă la câteva întrebări de tip grilă). Din momentul în care un candidat este invitat la interviu, nivelul de agitaţie a acestuia rămâne constant. Deoarece firma doreşte ca, indiferent de rezultatul interviului, toţi candidaţii să rămână cu o părere bună, comisia va forma grupurile şi va alege timpii de aşteptare în aşa fel încât suma totală a nivelelor de agitaţie a candidaţilor la sfârşitul interviului să fie minimă.
Cerință
Să se scrie un program care să determine suma totală minimă a nivelelor de agitaţie a candidaţilor la sfârşitul interviului.
Date de intrare
Fişierul de intrare agitatie.in
are pe prima linie numărul natural , reprezentând numărul de candidaţi. Pe următoarele N linii se află câte două numere întregi şi , separate printr-un spaţiu. reprezintă nivelul iniţial de agitaţie a candidatului, iar reprezintă sensul de modificare a agitaţiei pentru fiecare unitate de timp în care acesta aşteaptă (dacă este , atunci nivelul de agitaţie creşte, iar dacă este , nivelul de agitaţie scade). Linia din fişier va conţine valorile corespunzătoare candidatului cu numărul .
Date de ieșire
Fişierul de ieşire agitatie.out
va conţine pe prima (şi singura) linie suma totală minimă a nivelelor de agitaţie a candidaţilor la sfârşitul interviului.
Restricții și precizări
- nivelul iniţial de agitaţie a fiecărui candidat
Exemplu
agitatie.in
6
10 1
3 -1
2 -1
1 -1
9 1
6 -1
agitatie.out
23
Explicație
Suma totală minimă este . O posibilă soluţie este următoarea: Se formează grupuri.
Primul grup este format doar din candidatul şi aşteaptă unităţi de timp. Prin urmare, nivelul final de agitaţie a candidatului va fi .
Al doilea grup va aştepta unităţi de timp din momentul în care a terminat interviul primul grup (deci va începe interviul la momentul ), iar din grup vor face parte candidaţii şi . Nivelele finale de agitaţie a acestor candidaţi vor fi: şi .
Observaţi că nivelul de agitaţie a candidatului a scăzut întâi până la apoi a crescut la . Al -lea grup va mai aştepta unităţi de timp (deci va începe interviul la momentul ), iar din grup va face parte doar candidatul . Nivelul final de agitaţie a acestuia va fi .