Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Заказ в магазине Задача олимпиадная написать код на джаве/питоне

Автобус Мастер (1428), на голосовании 2 года назад
Заказ в магазине
Ограничение по времени: 0.5 секунды

Решив запастись ручками на весь новый учебный год, Игорь подсчитал, что ему нужно M ручек. В его любимом интернет‑магазине есть удобная функция — он может сразу добавить в заказ упаковку из любого числа ручек от 1 до N. Правда, оказалось, что нельзя добавить в заказ две упаковки одного размера. Например, если Игорю нужно купить M=12 ручек, а максимальное число ручек в упаковке N=10, то Игорь может добавить в заказ упаковку из 7 ручек и упаковку из 5 ручек, но не сможет добавить две упаковки из 6 ручек.
Сформируйте заказ на M ручек, используя минимальное число различных упаковок.

Формат входных данных
Первая строка входных данных содержит число N — максимальный размер одной упаковки (1≤N≤109).
Вторая строка входных данных содержит целое число M — необходимое количество ручек в заказе (1≤M≤109).

Формат выходных данных
Программа должна вывести одно или несколько чисел от 1 до N — размеры выбранных упаковок в любом порядке. Есть имеется несколько возможных решений, то выведите любое из них. Если решения не существует, необходимо вывести одно число 0.
Прошу вас помогите очень мало время
Голосование за лучший ответ
Евгений Скамейкин Ученик (166) 2 года назад
n = int(input())
m = int(input())
if n > m:
n = m
L = 0
R = n + 2
while R - L > 1:
mid = (L + R) // 2
if (mid + n) * (n - mid + 1) // 2 >= m:
L = mid
else:
R = mid
if (L + n) * (n - L + 1) // 2 < m:
print(0)
else:
for i in range(R, n + 1):
print(i)
s = (R + n) * (n - R + 1) // 2
if m - s > 0:
print(m - s)
Никита ХомяковУченик (148) 2 года назад
не правильно, не работает
Евгений СкамейкинУченик (166) 2 года назад
Что же я могу поделать, если тут пробелы в начале строк автоматически убираются? Вот так должно быть.
Евгений Скамейкин, что за язык?
Похожие вопросы