Энергоячейки склада

Просмотр в формате PDF

Submit solution


Очки: 160
Ограничение по времени: 1.0s
Ограничение по памяти: 64M

Автор:
Problem types
Allowed languages
C++, Python

На автоматизированном складе есть контейнеры с номерами от 1 до L.

У каждого контейнера есть энергетическая ценность, которая вычисляется так: берётся наибольшая степень двойки, на которую делится номер контейнера. Иначе говоря, для контейнера с номером x его ценность равна значению младшего установленного бита числа x.

Например:

  • контейнер 1 имеет ценность 1;
  • контейнер 6 имеет ценность 2;
  • контейнер 12 имеет ценность 4;
  • контейнер 16 имеет ценность 16.

Роботу нужно выбрать несколько различных контейнеров так, чтобы сумма их энергетических ценностей была ровно S.

Требуется определить, можно ли это сделать. Если можно, выведите любой подходящий набор контейнеров.

Входные данные

В единственной строке записаны два целых числа:

  • S — требуемая суммарная энергетическая ценность;
  • L — максимальный номер контейнера.

Выходные данные

Если подобрать набор невозможно, выведите -1.

Иначе в первой строке выведите число k — количество выбранных контейнеров.

Во второй строке выведите k различных целых чисел — номера выбранных контейнеров.

Если решений несколько, разрешается вывести любое.

Ограничения

  • 1 <= S <= 100000
  • 1 <= L <= 100000

Примеры

Пример 1

Входные данные

5 6

Выходные данные

4
6 5 3 1
Пример 2

Входные данные

3 2

Выходные данные

2
2 1
Пример 3

Входные данные

7 4

Выходные данные

3
4 3 2

Комментарии


  • 0
    Kazakov_Dmitrii  прокомментировал 8 Апрель 2026, 4:30 п.п.

    Добавьте, пожалуйста, в тестирующую систему проверку разных решений, она принимает только авторское.


    • 0
      montes332  прокомментировал 11 Апрель 2026, 2:11 п.п.

      ага, она в очереди на обновление