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

26.07 Детали на конвейерной ленте

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

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

Задача 1#136838

Отдел маркетинга сети магазинов составляет рейтинг продуктов по информации об их сроках хранения с момента изготовления и после вскрытия упаковки. Для каждого продукта известен срок его хранения с момента изготовления и срок годности к употреблению после вскрытия упаковки. Продукты пронумерованы начиная с единицы. В рейтинговом списке маркетологи располагают продукты по следующему алгоритму:

– все 2N  чисел, обозначающих срок хранения и срок годности к употреблению для N  продуктов, упорядочивают по возрастанию;

– если минимальное число в этом упорядоченном списке – срок хранения, то продукт в рейтинге занимает первое свободное место от его начала;

– если минимальное число – срок годности к употреблению, то продукт занимает первое свободное место от конца рейтинга;

– если число обозначает срок хранения или срок годности к употреблению уже рассмотренного продукта, то его не принимают во внимание.

Этот алгоритм применяется последовательно для размещения всех N  продуктов.

Определите номер последнего продукта, для которого будет определено его место в рейтинге, и количество продуктов, которые займут в рейтинге более низкие места.

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

В первой строке входного файла находится натуральное число N  (N ≤ 1000)  – количество продуктов. Следующие N  строк содержат пары чисел, обозначающих соответственно срок хранения продукта с момента изготовления и срок годности к употреблению после вскрытия упаковки (все числа натуральные, различные).

Запишите в ответе два натуральных числа: сначала номер последнего продукта, для которого будет определено его место в рейтинге, затем – количество продуктов, которые займут в рейтинге более низкие места.

Вложения к задаче
Показать ответ и решение
file = open(’DEMO_26.txt’)
n = int(file.readline())
products = []

# Читаем данные о продуктах
for i in range(n):
    data = list(map(int, file.readline().split()))
    storage = data[0]  # Срок хранения
    usage = data[1]    # Срок годности после вскрытия
    products.append((storage, ’storage’, i + 1))  # Добавляем срок хранения
    products.append((usage, ’usage’, i + 1))      # Добавляем срок годности

# Сортируем все числа по возрастанию
products.sort(key=lambda x: x[0])

# Инициализируем рейтинг (0 - свободное место)
rating = [0] * n
placed_products = []  # Список размещенных продуктов в порядке их размещения
used_products = set()  # Множество уже размещенных продуктов

# Обрабатываем числа в отсортированном порядке
for product in products:
    value, prodtype, num = product
    # Если продукт уже размещен - пропускаем
    if num in used_products:
        continue
    # Если минимальное число в упорядоченном списке – срок хранения, то ищем первое свободное место с начала.
    # Фиксируем, что продукт размещен и был использован (чтобы не размещать срок годности этого же продукта)
    if prodtype == ’storage’:
        for i in range(n):
            if rating[i] == 0:
                rating[i] = num
                placed_products.append(num)
                used_products.add(num)
                break
    else:# Если минимальное число в упорядоченном списке – срок годности, то
        # ищем первое свободное место с конца
        # Фиксируем, что продукт размещен и был использован (чтобы не размещать срок хранения этого же продукта)
        for i in range(n - 1, -1, -1):
            if rating[i] == 0:
                rating[i] = num
                placed_products.append(num)
                used_products.add(num)
                                                                                                  
                                                                                                  
                break

# Находим последний размещенный продукт
last_product = placed_products[-1]

# Находим позицию последнего продукта в рейтинге
last_position = rating.index(last_product)

# Считаем количество продуктов с более низкими местами
lower_rated_count = len(rating) - last_position - 1

print(last_product, lower_rated_count)

Ответ: 564 444

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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