Editorial for Ulične Lampe
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
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 lampe, stoga nam je potrebno bar paljenja lampi. Ovaj broj je očito i dovoljan, jer ako krenemo da palimo lampe do kraja, sve lampe će nam biti osvetljene, a upalićemo tačno lampi (poslednja može da bude umesto , ako ne postoji. Npr, za lampi treba da upalimo lampe ).
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 ć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 .
Comments