Изменения
Нет описания правки
*<tex>k</tex> {{---}} количество различных элементов, которые могут находиться в данном комбинаторном объекте (элемент лексикографически меньше другого, если номер элемента меньше номера другого) (например для битового вектора <tex>k=2</tex> : возможны только 0 и 1)
'''for''' i = 1 '''to''' n '''do''' '''for''' j = 1 '''to''' k '''do''' '''if''' элемент j можно поставить на i-e место '''{'''
'''if''' numOfObject > (количество комбинаторных обектов с данным префиксом) '''{'''
numOfObject -= (количество комбинаторных обектов с данным префиксом)
*мы должны поставить ту цифру, которая еще полностью не занята, то есть <tex>alreadyWas+1</tex> - ую, которой еще нет в нашем префиксе, считаем, что это цифра <tex>j</tex>
'''for''' i = 1 '''to''' n '''do''' '''{''' alreadyWas = (numOfPermutation-1) div <tex>P_{n-i} </tex> numOfPermutation = ((numOfPermutation-1) mod <tex>P_{n-i} </tex>) + 1
ans[i] = j (посчитаем за <tex>O(n) </tex>)
теперь j-ый элемент занят (находится в нашем префиксе)