Editorial for Polica
Submitting an official solution before solving the problem yourself is a bannable offence.
Da bi raspored dobijen zamenom dve cifre imao najveću moguću lepotu, želimo da prva cifra bude najveća moguća, pa ako iza postoji neka veća vrednost, zamenićemo je sa onom koja je:
- najveća, i ako postoji nekoliko istih
- poslednjom takvom (da bi stavili manju cifru na mesto sa što manjom "težinom").
Ukoliko ovakva cifra ne postoji, odnosno je veća ili jednaka od svih vrednosti desno od nje, isti proces probamo za sledeću cifru (gde kao kandidate za zamenu gledamo samo one desno od ), i tako dalje dok ne nađemo par koji se može zameniti.
Ukoliko dođemo do kraja broja i nismo ništa zamenili, cifre u početnom rasporedu su opadajuće, tako da nije moguće povećati lepotu rasporeda. U ovom slučaju nam je cilj da je smanjimo što manje (jer moramo napraviti neku zamenu). Ukoliko postoje dve iste cifre, zamenićemo njih da bi lepota ostala ista. U suprotnom, optimalno rešenje je da zamenimo poslednje dve cifre.
"Naivno" rešenje zadatka koje za svako prolazi kroz sve cifre desno od nje ima vremensku složenost , tako da se neće izvršiti u datom ograničenju za poslednji podzadatak. Da bi izbegli ovaj korak, na početku programa možemo pronaći poslednje pojavljivanje svake cifre i sačuvati to u pomoćnom nizu, što se može iskoristiti da za svako nađemo optimalnu zamenu u konstantnom vremenu, i samim tim daje ukupnu vremensku složenost .
Comments