Vizualizare solutie

Titlul problemei: furnici
Numarul problemei: 2
Runda: Runda 10 (finala)
Solutie: Ideea de rezolvare a problemei se bazeaza pe urmatoarea observatie:

"Oricat de multe furnici ar fi timpul maxim in care TOATE furnicile traverseaza tunelul depinde doar de ultimele doua furnici - una care intra ultima prin capatul din stanga si cealalta cea care intra ultimaprin capatul din dreapta al tunelului - toate celelalte furnici au trecut deja" . Deci pentru a determina timpul minim in care toate furnicile trec prin tunel, trebuie determinat timpul minim in care cele doua ultime furnici trec prin tunel. Acesta se adauga apoi la ultimul timp, cel la care intra in tunel ultima furnica (fie stanga fie dreapta) - de fapt determinarea se face direct, in timpul calculului. Pentru a face calculul in acelasi mod pentru toate cazuri, se considera ca puncte speciale si intrarile in tunel, deci in total vor fi nr_loc+2 locuri speciale (de la 0 la nr_loc+1).

Pseudocod
=========

citire
citeste L, nr_loc
pentru i=1, nr_loc
citeste loc[i]
loc[0]=0
loc[nr_loc+1]=L
citeste nr_furnici_stanga
TimpMaxS=0
pentru i=1, nr_furnici_stanga executa
{
citeste timp
daca timp>TimpMaxS atunci
TimpMaxS=timp
}
citeste nr_furnici_dreapta
TimpMaxD=0
pentru i=1, nr_furnici_dreapta executa
{
citeste timp
daca timp>TimpMaxD atunci
TimpMaxD=timp
}

calcul
TimpMinim=INFINIT
pentru i=0, nr_loc+1 executa //pentru fiecare din locurile speciale
{
stanga=TimpMaxS+loc[i] //timpul maxim cand ajunge ultima furnica din stanga in acest loc
dreapta=TimpMaxD-loc[i]+L //timpul maxim cand ajunge ultima furnica din dreapta in acest loc
daca stanga>dreapta atunci //deci in acest loc se ajunge dupa poz secunde
timp=stanga //(maximul dintre furnica stanga si furnica dreapta)
altfel
timp=dreapta
daca loc[i]>L-loc[i] atunci //se adauga eventualul timp de asteptare
timp=timp+loc[i] //pana ajunge cealalta furnica
altfel
timp=timp+L-loc[i]
daca timp<TimpMinim atunci
TimpMinim=timp //se retine minimul pana in acest moment
}

Din arhiva de teste lipseste testul 0-furnici.in (care are 1,8 Mb).