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

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

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

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

Задача 1#86444

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

- все 2N чисел, обозначающих время окрашивания и шлифовки для N деталей, упорядочивают по возрастанию;

- если минимальное число в этом упорядоченном списке — это время шлифовки конкретной детали, то деталь размещают на ленте транспортёра на первое свободное место от её начала;

- если минимальное число — это время окрашивания, то деталь размещают на первое свободное место от конца ленты транспортёра;

Этот алгоритм применяется последовательно для размещения всех N деталей. Определите сколько деталей будет отшлифовано, и деталь с каким номером окажется на позиции с номером K на ленте транспортёра.

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

Запишите в ответе два натуральных числа через пробел: сначала абсолютную разность между количеством деталей, которые отшлифовали и количеством деталей, которые покрасили, расположенных на ленте, затем номер детали, которая окажется на позиции c номером K на ленте транспортёра.

Вложения к задаче
Показать ответ и решение
file = open(’26_3M.txt’)
count_detail,position = map(int,file.readline().split())
array_details = []
for i in range(count_detail):
    detail = list(map(int,file.readline().split()))
    if detail[0] > detail[1]:
        array_details.append((detail[1],’paint’,i+1))
    else:
        array_details.append((detail[0], ’grind’, i + 1))
array_details.sort()
details = []
lenta = [0]*count_detail
for detail in array_details:
    if detail[1] == ’grind’:
        for i in range(len(lenta)):
            if lenta[i] == 0:
                lenta[i] = detail[2]
                details.append(detail)
                break
    else:
        for i in range(len(lenta)-1,-1,-1):
            if lenta[i] == 0:
                lenta[i] = detail[2]
                details.append(detail)
                break
count_grind = len([x for x in details if x[1] == ’grind’])
count_paint = len([x for x in details if x[1] == ’paint’])
print(abs(count_grind-count_paint),lenta[position - 1])

Ответ: 19 637

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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