Задача к ЕГЭ по информатике на тему «Детали на конвейерной ленте» №5

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

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

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

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

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

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

Определите сколько деталей будет отшлифовано и какой номер будет иметь деталь, которая была размещена на ленте последней.

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

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

file = open(’26_1.txt’)
count_detail = int(file.readline())
array_detail = []
for i in range(count_detail):
    detail = list(map(int,file.readline().split()))
    if detail[0] > detail[1]:
        array_detail.append((detail[1],’paint’,i+1))
    else:
        array_detail.append((detail[0], ’grind’, i + 1))
array_detail.sort()
details = []
lenta = [0]*count_detail
for detail in array_detail:
    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(len([x for x in details if x[1] == ’grind’]),details[-1][2])

Ответ: 484 544
Оцените статью
Я решу все!