Editorial for Ulične Lampe


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

Author: Pajaraja

Posmatrajmo prvo šta se dešava u slučaju da na početku nijedna lampa nije upaljenja. Očito nam svaka lampa osvetljava najviše 3 lampe, stoga nam je potrebno bar \lceil\frac{x}{3}\rceil paljenja lampi. Ovaj broj je očito i dovoljan, jer ako krenemo da palimo lampe 2,5,8,11\cdots do kraja, sve lampe će nam biti osvetljene, a upalićemo tačno \lceil\frac{x}{3}\rceil lampi (poslednja može da bude 3x+1 umesto 3x+2, ako 3x+2 ne postoji. Npr, za 10 lampi treba da upalimo lampe 2,5,8,10).

Sada kad smo rešili ovaj podproblem, ceo zadatak se ne rešava teško. Na početku prostom simulacijom (jednim prolaskom kroz niz) vidimo koje su lampe već osvetljene. Ostatak lampi ćemo podeliti u "blokove" uzastopnih neosvetljenih lampi. Ove blokove možemo nezavisno rešavati, jer rešavanje jednog očigledno ne može nikako da utiče na rešavanje drugog. Stoga sumirajući rešenja po svim blokovima \lceil\frac{\text{dužina bloka}}{3}\rceil će nam dati traženo rešenje.

Uzeti u obzir da morate da se pazite da pri tom prolasku kroz niz uračunate i blok na kraju. Moguće je odrediti blokove jednim prolaskom kroz niz, ali lakše i bezbednije je da u prvom prolazu odredite koje su lampe osvetljene, pa tek u drugom prolazu da odredite podelu na blokove. Vremenska i memorijska složenost opisanog rešenja su O(N).


Comments

There are no comments at the moment.