Editorial for Postar
Submitting an official solution before solving the problem yourself is a bannable offence.
Analiza
Zadatak rešavamo dinamičkim programiranjem.
Rešimo prvo zadatak u slučaju da su sve koordinate pozitivne. Prvo sortiramo tačke po uglu u odnosu na poziciju pošte. Neka je
najmanja dužina puta, koju poštar mora da pređe, da bi obišao sve planere u intervalu
, ukoliko je to moguće i
u suprotnom. Neka smo povezali
sa nekom
takvom da je
, to je
. Druga opcija je da povežemo planetu
sa
. Dovoljno je da proverimo da li duž koja ih spaja seče duž između pošte i neke druge planete. To možemo da uradimo u
. Ukoliko ne seče, imamo još jednog kandidata za rešenje, pa je onda
, gde je
rastojanje između planete sa indeksom
i planete sa indeksom
. Rezultat je u
, a vremenska složenost algoritma je
.
Sada možemo rešenje da uopštimo na slučaj da koordinate
nisu pozitivne. Primetimo da kako god povezali planete, uvek možemo da nacrtamo jednu polupravu iz
, koja ne seče ni jednu putanju. Ovo važi zato što se putanje međusobno ne seku. "Luk" koji pravi jedan obilazak dve planete može da bude sadržan u nekom drugom i da sadrži neki drugi, ali ne mogu da se seku. Sada sortiramo tačke po uglu. Ako pretpostavimo da smo povukli tu polupravu negde između
i
planete, možemo da posmatramo niz koji je ciklično pomeren ulevo za
mesta i da ponovimo dinamičko kao u prethodnom delu. Ovo rešenje radi u složenosti
.
Međutim možemo da primetimo da veliki deo tog dinamičkog mi izračunavamo više puta. Možemo da dupliramo sortirani niz, tj. ciklično ga ponovimo drugi put i ponovo izračunamo
. Primetimo da je sada u
upravo rešenje koje se dobija kada bi poluprava bila između planeta
i
. Pa je krajnji rezultat
. Vremenska složenost
, memorijska složenost
.
Comments