Editorial for Moćni Niza
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Primetimo, prvo, da je optimalno da moć našeg niza ima bit ukoliko je to moguće, zato što čak i kad bi moć imala sve ostale, manje bitove, oni bi se sumirali u . Potom treba da proverimo da li moć može da ima i i bit. Ukoliko to nije moguće, bit možemo da ignorišemo i nastavimo dalje, a ukoliko jeste, zahtevaćemo da u rešenju uvek postoje ta dva bita. Dakle, možemo da nastavimo sa ovom procedurom, pohlepnog dodavanja bitova. Neophodno je da proverimo da li možemo da nađemo podelu u segmenata, tako da moć niza sadrži neki podskup bitova , tj. da li možemo da podelimo niz u segmenata, tako da svaki segment sadrži bitove iz skupa . Neka su pozicije numerisane od . Pronađimo za svaku poziciju najmanje , takvo da (cikličnog) segmenta sadrži sve bitove iz skupa . Ovakvo možemo pronaći binarnom pretragom. Neka je . Želeli bi da pronađemo da li je moguće napraviti podelu u segmente, tako da svaki segment sadrži bitove iz skupa i tako da jedan segment počinje na poziciji . Tada će jedan segment početi na poziciji , naredni na poziciji itd. Ovo je moguće postići tehnikom binarnog stepenovanja (eng. ). Za svaku poziciju pronađemo vrednost - najmanja vrednost tako da ciklični segment možemo podeliti na bar segmenata, tako da svakog segmenta sadrži sve bitove iz skupa . Tada:
Kada pronađemo ove vrednosti, neophodno je da pronađemo za svako najmanje , tako da ciklični segment možemo podeliti na segmenata tako da svakog segmenta sadrži sve bitove iz skupa . To možemo pronaći na sličan način kao i vrednosti matrice . Ukoliko postoji , takvo da je , tada je moguće napraviti podelu na segmenata tako da svakog segmenta sadrži sve bitove iz skupa . Složenost opisanog algoritma je . Zadatak je preuzet sa , takmičenje .
Comments
Miki samo nastavljaš da me oduševljavaš!