1 - Upoznavanje
Vremensko ograničenje | Memorijsko ograničenje |
---|---|
2000ms | 256MB |
Miloš se nedavno preselio u jednodimenzionalni prostor. Njegova kuća se nalazi na \(x\) metara od koordinatnog početka. On takođe zna da ima \(n\) komšija i zna koordinate njihovih kuća.
Kao i svaki pristojan stanovnik jednodimenzionalnog prostora, Miloš bi želeo da se upozna sa svim svojim komšijama. On zna da mu je za pešačenje jednog metra potrebna jedna sekunda.
Pomozite Milošu i recite mu koliko mu je najmanje sekundi potrebno da obiđe sve svoje komšije.
Opis ulaza
U prvom redu nalaze se dva cela broja \(n\) i \(x\), broj komšija i pozicija Miloševe kuće. Drugi red sadrži \(n\) celih brojeva, \(a_1, a_2, \dots, a_n\), gde je \(a_i\) pozicija \(i\)-tog Miloševog komšije.
Opis izlaza
Ispisati jedan ceo broj koji predstavlja minimalno vreme potrebno Milošu da obiđe sve svoje komšije.
Primer 1
Ulaz
Izlaz
Primer 2
Ulaz
Izlaz
Objašnjenje primera
U prvom primeru, Miloš treba da se kreće na desno sve do kuće sa koordinatom \(7\).
U drugom primeru, Miloš prvo obilazi levog komšiju na poziciji \(3\), a nakon toga se kreće na desno do komšije sa koordinatom \(9\).
Ograničenja
- \(1\le n \le 10^6\)
- \(-10^8 \le x \le 10^8\)
- \(-10^8 \le a_i \le 10^8\)
Test primeri su podeljeni u 4 disjunktne grupe:
- U test primerima vrednim 30 poena: \(n \le 10\).
- U test primerima vrednim 15 poena: sve komšije se nalaze desno od Miloša.
- U test primerima vrednim 15 poena: sve komšije se nalaze levo od Miloša.
- U test primerima vrednim 40 poena: nema dodatnih ograničenja.
Autor | Tekst i test primeri | Analiza rеšenja | Testiranje |
---|---|---|---|
Nikola Pešić | Lazar Milenković | Dragan Urošević | Vladimir Milenković |
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 $$ a_1 \leqslant a_2 \leqslant a_3 \leqslant \dotsb \leqslant a_n. $$
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 $$ (a_{r_1} – x) + (a_{r_1} – a_l) + (a_{r_2} – a_{l}). $$ 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 $$ (x – a_l) + (a_{r_2} – a_{l}). $$ Lako se pokazuje da važi: $$ (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}). $$ 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
$$
x-a_1 + a_n – a_1,
$$
a u drugoj varijanti je
$$
a_n – x + a_n – a_1.
$$
Minimalno vreme upoznavanja je
$$
\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}.
$$
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)\).