Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Задание по информатике надо решить в python

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

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

Формат выходных данных
Программа должна вывести одно или несколько чисел от 1 до N — размеры выбранных упаковок в любом порядке. Есть имеется несколько возможных решений, то выведите любое из них. Если решения не существует, необходимо вывести одно число 0.

По дате
По рейтингу
Аватар пользователя
Профи
12345678910111213
 n, m = int(input()), int(input()) 
 
# Если сумма чисел от 1 до n меньше m, то заказать таким образом 
# не получится. 
if n * (n + 1) // 2 < m: 
    print(0) 
else: 
    while n < m: 
        m -= n 
        print(n) 
        n -= 1 
 
    print(m) 
Аватар пользователя
Ученик

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)