printРабочее место участника

printЗадачи

1504. Резервное копирование

Ограничения: время – 200ms/500ms, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод copy
Послать решение Blockly Посылки Темы Где Обсудить (0) idea

Профессор Фринк хочет скопировать информацию о своих изобретениях из своего компьютера на CD. Для уменьшения количества дисков он придумал следующий алгоритм. На первом этапе файлы упорядочиваются в порядке уменьшения их размера (при совпадении размеров первым должен быть файл, указанный в списке копируемых файлов раньше). На втором этапе файлы записываются на диски. Для записи очередного файла выбирается диск с наименьшим номером среди тех используемых для копирования дисков, на который данный файл может поместиться. Если ни одного такого диска нет, к набору дисков добавляется новый диск, на который записывается файл.
Напишите программу, определяющую какие файлы на какой диск будут записаны при использовании этого алгоритма. При записи нужно учитывать, что файл должен занимать целое число кластеров и, если размер кластера равен `C`, файл размером от 1 до `C` байт занимает `C` байт на диске, файл размером от `C+1` до `2*C` занимает `2*C` байт на диске и так далее.
Первая строка ввода содержит три целых числа - количество файлов `N` (`1\ ≤\ N\ ≤\ 1000`), размер одного диска `S` (`10^3\ ≤\ S\ ≤\ 10^9`) и размер кластера `C` (`1\ ≤\ C\ ≤\ S`, `S` кратно `C`). Вторая строка ввода содержит `N` целых чисел в диапазоне от 1 до `S` – размеры файлов.
В первой строке выведите одно целое число `M` – количество дисков, использованных для записи. Далее выведите `M` строк, в `(i+1)`-й строке выведите номера файлов, которые нужно записать на `i`-й диск, в порядке их записи.

Пример ввода

3 675840000 4096
15 675839000 100000

Пример вывода

2
2
3 1
loading