Editorial for Kul kule
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Analiza
Da bismo mogli da nađemo minimalan broj operacija za izjednačavanje
svih kula, prvo nam je potreban način da odredimo minimalan broj
operacija potreban da bi se jednoj kuli dodalo kockica. Ovo nije
moguće ako
, jer je svaka operacija dodaje barem dve
kockice. Ako
, optimalan algoritam je:
- dok
nije deljivo sa
, dodaj dve kockice (i samim time smanji
za
)
- dodaj
grupa od po tri kockice
Jasno je da je ovaj algoritam optimalan u slučaju u kom je deljivo
sa
. Ako
nije deljivo sa
, sigurno moramo da iskoristimo
barem jednu grupu od dve kockice, a ako pretpostavimo da je naš
algoritam optimalan za
kockice, po indukciji je optimalan za
svako
(gde su bazni slučajevi
i
, za koje je potrebna
jedna grupa).
Primetimo da ove vrednosti (minimalni brojevi operacija) rastu sa K
(počev od , vrednosti su:
-- svaka posle
se ponavlja tri puta). Dakle, minimalan
ukupan broj operacija se postiže tako što odaberemo najmanju "ciljnu
visinu"
na koju možemo dovesti visine svih kula.
Pošto ne možemo "smanjivati" kule, ovo mora biti veće ili jednako
od svih vrednosti
. Takođe ne sme biti jednako sa
ni za
jedno
, pošto kule ne možemo povećati za samo jednu kockicu. Ako je
maksimalna vrednost u nizu
, imamo dve mogućnosti:
se ne javlja u
-- optimalno je
- u suprotnom, ne možemo koristiti
(zbog
) ni
(zbog
) -- optimalno je
Nakon što odredimo optimalnu vrednost za , potrebno je samo da
saberemo broj potrebnih kockica za svaku kulu na osnovu opisanog
algoritma. Kako
možemo odrediti jednim prolazom kroz niz (gde
pamtimo najveći i drugi najveći element), a broj dodatih kockica u
po kuli (jer ćemo najviše dvaput dodati dve kockice),
ukupna složenost algoritma je
.
Comments