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