Editorial for Upoznavanje


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

Reći ćemo da su komšije čija je pozicija manja od Miloševe pozicije komšije levo, a komšije čija je pozicija veća od Miloševe pozicije komšije desno. Ako su sve komšije levo od Miloša, onda će najbrže upoznati sve komšije tako što krene ulevo i upoznaje komšije u redosledu u kome stiže do svakog od njih. U tom slučaju će vreme upoznavanja biti razlika Miloševe pozicije i pozicije krajnje levog komšije. Slično, ako su sve komšije desno od Miloša, onda kreće udesno i upoznaje komšije u redosledu u kome stiže do svakog od njih. Tada će vreme upoznavanja biti razlika između pozicije krajnje desnog komšije i Miloševe pozicije. Ostaje da rešimo slučaj kada postoji bar jedan komšija levo i bar jedan komšija desno.

Pokažimo da Miloš u optimalnom postupku (redosledu) upoznavanja sa prijateljima ne može proći dva ili više puta "pored" svoje kuće. Neka su komšije sortirane prema svojoj poziciji, tj. tako da je \(None\) a_1 \leqslant a_2 \leqslant a_3 \leqslant \dotsb \leqslant a_n. \(None\)

Neka je u optimalnom postupku upoznavanja, Miloš išao na desno do komšije {r_1}, zatim se "vratio" do komšije l, a potom od komšije {l} ponovo krenuo udesno do komšije {r_2} (r_2 > r_1). Tada je vreme upoznavanja tih komšija iznosilo \(None\) (a_{r_1} – x) + (a_{r_1} – a_l) + (a_{r_2} – a_{l}). \(None\) Međutim, ako bi Miloš išao prvo ulevo do komšije l, a nakon toga udesno do komšije {r_2}, upoznao bi isti skup komšija, ali bi vreme upoznavanja iznosilo \(None\) (x – a_l) + (a_{r_2} – a_{l}). \(None\) Lako se pokazuje da važi: \(None\) (a_{r_1} – x) + (a_{r_1} – a_l) + (a_{r_2} – a_{l}) > (a_{r_1} – a_l) + (a_{r_2} – a_{r_1}) > (x – a_l) + (a_{r_2} – a_{r_1}). \(None\) Na sličan način bi se postupilo da je išao ulevo do komšije {l_1}, zatim udesno do r i nakon toga ponovo ulevo do komšije {l_2} (l_2 < l_1). Taj raspored bi se mogao zameniti rasporedom u kome bi išao udesno do komšije r, a zatim ulevo do komšije {l_2} (a vreme upoznavanja za taj raspored je manje).

Prema tome, ako postoji bar jedan komšija levo i bar jedan komšija desno, izdvajaju se dva redosleda za upoznavanje komšija:

  • Miloš može ići ulevo do krajnje levog komšije, a zatim udesno do krajnje desnog komšije, ili
  • Miloš može ići udesno do krajnje desnog komšije, a zatim ulevo do krajnje levog komšije.

Vreme upoznavanja u prvoj varijanti je \(None\) x-a_1 + a_n – a_1,
\(None\) a u drugoj varijanti je \(None\) a_n – x + a_n – a_1. \(None\) Minimalno vreme upoznavanja je \(None\) \min{ x-a_1 + a_n – a_1, a_n-x + a_n – a_1,} = a_n – a_1 + \min{x-a_1, a_n – x}. \(None\) Za kraj primetimo da niz a nije neophodno sortirati jer je su nam potrebne samo vrednosti prvog i poslednjeg elementa sortiranog niza, a to su zapravo najmanji i najveći element niza. Vremenska složenost ovog rešenja je O(n).


Comments

There are no comments at the moment.