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