Помощь - Поиск - Пользователи - Календарь
Полная версия: Винтовки белочехов
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Merhaba
Помогите Пожалуйста решить задачу:
Ограничение времени: 3.0 секунды
Ограничение памяти: 64 МБ

Белочехи решили прекратить ожесточённые бои в Сибири и вернуться домой. Но покинуть Россию было непросто — чтобы добраться на кораблях из Владивостока в Европу, были нужны деньги. Белочехи решили раздобыть необходимую сумму, продав свои винтовки наступающим войскам красных. Всего на продажу они выставили n винтовок. Первые две винтовки были самыми обычными, и белочехи просили за каждую из них только один рубль. Зато i-я винтовка (i ≥ 3) стоила столько же, сколько (i−1)-я и (i−2)-я вместе взятые.
В стране имеют хождение только банкноты с номиналами, равными степеням числа k (банкноты в один рубль, k рублей, k2 рублей и т. д.) В распоряжении большевиков уже достаточно типографий, поэтому напечатать нужное количество денег не составило труда. Они заплатили за каждую винтовку минимально возможное количество банкнот, в сумме дающее ровно столько, сколько просили за эту винтовку белочехи.
Когда винтовки попали в руки красных, Чапаев попросил Анку упорядочить их по возрастанию количества банкнот, которое было за них заплачено. Если за две винтовки было заплачено одинаковое количество банкнот, то раньше должна идти винтовка с меньшим номером. Помогите Анке выполнить просьбу Чапаева.
Исходные данные
В единственной строке через пробел записаны целые числа k и n (2 ≤ k ≤ 10; 3 ≤ n ≤ 50000).
Результат
Выведите перестановку чисел от 1 до n — номера винтовок, упорядоченные по возрастанию количества уплаченных за них банкнот.
Пример
исходные данные
10 8
результат
1 2 3 4 8 7 5 6

Подсказка
Когда Анка выполнит просьбу Чапаева, стоимости винтовок в рублях будут выглядеть так: {1, 1, 2, 3, 21, 13, 5, 8}.

Мне кажется, что нужно написать процедуры:
в первой считаем сколько денег стоит каждая винтовка.
во второй считаем сколько банкнот нужно на покупку каждой винтовки
в третьй просто сортируем.



Добавлено через 12 мин.
Стоимость винтовок образуют последовательность фиббоначчи.
Мне кажется, чтобы все работало быстро нужно считать в длинных числах по основанию k ^ l <= 10^6. Чем больше l - тем быстрее будут операции с длинными числами, тем быстрее будет все работать.
Помогите Пожалуйста оформить код!
Merhaba
Мне кажется, чтобы съэкономить время, нужна быстрая сортировка:

{ быстрая сортировка }     procedure QuickSort(var item: DataArray; count:integer);      
 procedure qs(l, r: integer; var it: DataArray);         
var         i, j: integer;        
 x, y: DataItem;       begin         
i:=l; j:=r;        
 x:=it[(l+r) div 2];         repeat           
while it[i]<x do i := i+1;          
 while x<it[j] do j := j-1;          
 if y<=j then           begin             
y := it[i];            
 it[i] := it[j];             
it[j] := y;            
 i := i+1; j := j-1;           
end;         
until i>j;        
 if l<j then qs(l, j, it);         
if l<r then qs(i, r, it)       
end;     
begin       
qs(1, count, item);     
end; { конец быстрой сортировки }
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.