26.07 Детали на конвейерной ленте
Ошибка.
Попробуйте повторить позже
На производстве штучных изделий N деталей должны быть отшлифованы и окрашены. Для каждой детали известно время её шлифовки и время окрашивания. Детали пронумерованы начиная с единицы. Параллельная обработка деталей не предусмотрена. На ленте транспортёра имеется N мест для каждой из N деталей. На ленте транспортёра детали располагают по следующему алгоритму:
— все 2N чисел, обозначающих время окрашивания и шлифовки для N деталей, упорядочивают по возрастанию;
— если минимальное число в этом упорядоченном списке — это время шлифовки конкретной детали, то деталь размещают на ленте транспортёра на первое свободное место от её начала;
— если минимальное число — это время окрашивания, то деталь размещают на первое свободное место от конца ленты транспортёра.
— если число обозначает время окрашивания или шлифовки уже рассмотренной детали, то его не принимают во внимание.
Этот алгоритм применяется последовательно для размещения всех N деталей. Определите номер предпоследней детали, для которой будет определено её место на ленте транспортёра, и количество деталей, которые будут покрашены до неё.
Входные данные:
В первой строке входного файла находится натуральное число N (N < 1000) – количество деталей. Следующие N строк содержат пары чисел, обозначающих соответственно время шлифовки и время окрашивания конкретной детали (все числа натуральные, различные).
Запишите в ответе два натуральных числа через пробел: сначала номер предпоследней детали, для которой будет определено её место на ленте транспортёра, затем количество деталей, которые будут покрашены до неё.
file = open(’26_9793.txt’) count_details = int(file.readline()) array_details = []#список, в котором у нас будут все детали файла for i in range(count_details): 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() lenta = [0]*count_details#симулируем ленту транспортёра details = []#список, в котором у нас будут детали, которые мы положили на ленту for detail in array_details:#проход по всевозможным деталям файла if detail[1] == ’grind’:#если эту деталь нужно отправить на шлифовку for i in range(len(lenta)):#то делаем перебор с начала ленты if lenta[i] == 0:#если эта ячейка свободна lenta[i] = 1#указываем, что она занята details.append(detail) break#сброс цикла для того, чтобы перейти к следующей детали else:#в ином случае for i in range(len(lenta)-1,-1,-1):#перебор с конца ленты if lenta[i] == 0:#если эта ячейка свободна lenta[i] = 1#указываем, что она занята details.append(detail) break#сброс цикла для того, чтобы перейти к следующей детали #выводим номер, предпоследней детали, а также количество покрашенных деталей до этой детали print(details[-2][2],len([x for x in details[:-2] if x[1] == ’paint’]))
Специальные программы
Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!
Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.
Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.
Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».
Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!
Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!