Описание:Есть люди, стоящие в кругу, ожидающие исполнения. Вычисление начинается в какой-то момент круга и продолжается вокруг круга в фиксированном направлении. На каждом шаге определенное количество людей пропускается, а следующий человек выполняется. Устранение продолжается вокруг круга (который становится все меньше и меньше по мере удаления казненных людей), пока остается только последний человек, которому предоставляется свобода.
Я искал эту "проблему Джозефуса", а хиты Wikipedia дают мне решение для динамического программирования: f(n,k)=((f(n-1,k)+k-1) mod n)+1, with f(1,k)=1
, но это дает только последний оставшийся в живых. Как я могу получить последовательность людей, выполненных? Скажем, p (5, 3) = {3,1,5,2,4}.
Кроме того, существует ли O(nlogn)
решение вместо O(nk)
one?