Тема 26. Обработка целочисленной информации с использованием сортировки

26.02 Закупка изделий двух типов

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка целочисленной информации с использованием сортировки
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#53447

Предприятие производит оптовую закупку изделий A и Z, на которую выделена определённая сумма денег. У поставщика есть в наличии партии этих изделий различных модификаций по различной цене. На выделенные деньги необходимо приобрести как можно больше изделий A (независимо от модификации). Закупать можно любую часть каждой партии. Если у поставщика закончатся изделия A, то на оставшиеся деньги необходимо приобрести как можно больше изделий Z. Известна выделенная для закупки сумма, а также количество и цена различных модификаций данных изделий у поставщика. Необходимо определить, сколько будет закуплено изделий Z и какая сумма останется неиспользованной. Если возможно несколько вариантов решения (с одинаковым количеством закупленных изделий Z), нужно выбрать вариант, при котором оставшаяся сумма максимальна.

Входные данные представлены в файле 26-42.txt следующим образом. Первая строка входного файла содержит два целых числа: N – общее количество партий изделий у поставщика и S – сумма выделенных на закупку денег (в рублях). Каждая из следующих N строк описывает одну партию изделия: сначала записана буква A или Z (тип изделия), а затем – два целых числа: цена одного изделия в рублях и количество изделий в партии. Все данные в строках входного файла разделены одним пробелом. В ответе запишите два целых числа без пробелов и разделителей: сначала количество закупленных изделий типа Z, затем оставшуюся неиспользованной сумму денег.

Пример входного файла

4 1000

A 14 12

Z 30 7

A 40 20

Z 50 15

В данном случае сначала нужно купить изделия A: 12 изделий по 14 рублей и 20 изделий по 40 рублей. На это будет потрачено 968 рублей. На оставшиеся 32 рубля можно купить 1 изделие Z по 30 рублей. Таким образом, всего будет куплено 1 изделие Z и останется 2 рубля. В ответе надо записать числа 1 и 2.

Вложения к задаче
Показать ответ и решение
f = open(’26.txt’)
n, s = map(int,f.readline().split())
batch = [] # Список всех изделий
for i in range(n):
    type, price, count = f.readline().split()
    batch.append([type, int(price), int(count)])
# Сортируем сначала по типу товара, потом - по цене
batch = sorted(batch, key=lambda x: (x[0], x[1]))
# Добавляем первое изделие в список закупок
sm = [batch.pop(0)]
# Пока итоговая сумма закупок позволяет добавить еще одно изделие и не превысить s
while sum(i[1]*i[2] for i in sm) + batch[0][1]*batch[0][2]< s:
    sm += [batch.pop(0)] # Добавляем еще одно изделие
# Пока итоговая сумма закупок позволяет добавить один товар из самого из дешевых оставшихся изделий
while sum(i[1]*i[2] for i in sm)+batch[0][1] < s:
        sm.append([batch[0][0], batch[0][1], 1]) # Добавляем по одному товару

print(sum(i[2] for i in sm if i[0]==’Z’)) # Общее количество товаров типа Z
print(s-sum(i[1]*i[2] for i in sm)) # Оставшееся количество денег

Копируем текст из блокнота, затем открываем редактор электронных таблиц. Вставляем скопированное, открываем страницу Данные и Текст по столбцам, жмём далее и среди символов-разделителей выбираем пробел, жмём далее и готово.

Первая строка не разделилась, ее просто удаляем.

Ищем раздел Сортировка и фильтр, выбираем настраиваемую сортировку, добавляем уровень и первым уровнем сортируем по столбцу A, вторым по B. Теперь можно считать сумму.

В столбце D пишем в первой ячейке = A1 ⋅B1  , так мы узнаем, сколько стоит партия. Теперь протягиваем первую ячейку вниз. Ячейке правее считаем сумму, для этого первую ячейку оставляем, в E2 пишем =D2+E1, так же протягиваем вниз. Доходим до последней ячейки, которая не превышает бюджет, это Е414. Вычитаем из бюджета ячейку Е414. У нас остается 10981 рубль, значит, мы можем купить еще 33 товара типа Z за 10791 рубль. У нас остается 190 рублей. Теперь из столбца B2 считаем количество товаров типа Z от самого верхнего до D412, получается =СУММ(B264:B412), не забываем прибавить 33 докупленных. Выходит 6111.

Ответ: 6111190

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!