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]) # так как последняя деталь будет центральной на ленте # то до нее не будет покрашено ни одной детали
Ошибка.
Попробуйте повторить позже
На производстве штучных изделий N деталей должны быть отшлифованы и окрашены. Для каждой детали известно время её шлифовки и время окрашивания. Детали пронумерованы начиная с единицы. Параллельная обработка деталей не предусмотрена. На ленте транспортёра имеется N мест для каждой из N деталей. На ленте транспортёра детали располагают по следующему алгоритму:
— все 2N чисел, обозначающих время окрашивания и шлифовки для N деталей, упорядочивают по возрастанию;
— если минимальное число в этом упорядоченном списке — это время шлифовки конкретной детали, то деталь размещают на ленте транспортёра на первое свободное место от её начала;
— если минимальное число — это время окрашивания, то деталь размещают на первое свободное место от конца ленты транспортёра.
- из-за низкокачественных,безответственных сотрудников для каждой 5 детали определяется куда отправится деталь не по минимальному числу, а по максимальному.
— если число обозначает время окрашивания или шлифовки уже рассмотренной детали, то его не принимают во внимание.
Этот алгоритм применяется последовательно для размещения всех N деталей. Определите номер последней детали, отправленной на покраску, для которой будет определено её место на ленте транспортёра, затем количество деталей, назначенных на отшлифовку, расположенных на второй половине ленты.
Входные данные:
В первой строке входного файла находится натуральное число N (N < 1000) – количество деталей. Следующие N строк содержат пары чисел, обозначающих соответственно время шлифовки и время окрашивания конкретной детали (все числа натуральные, различные).
Запишите в ответе два натуральных числа через пробел: сначала номер последней детали, отправленной на покраску, для которой будет определено её место на ленте транспортёра, затем количество деталей, назначенных на отшлифовку, расположенных на второй половине ленты.
f = open(’26_4M__3whpp.txt’) n = int(f.readline()) line_start = [] # Список деталей в начале ленты для шлифовки line_end = [] # Список деталей в конце ленты для окраски c = 0 # Номер детали for i in f: c += 1 # Увеличиваем номер детали t1, t2 = map(int, i.split()) # Время шлифовки и время окрашивания if c % 5 != 0: #если номер детали не кратен 5 if t1 < t2: #определяем куда пойдет деталь по минимальному числу line_start.append([t1, c]) else: line_end.append([t2, c]) else: #в ином случае, определяем куда пойдет деталь по максимальному числу if t1 > t2: line_start.append([t1, c]) else: line_end.append([t2, c]) line_start.sort() # Сортируем список шлифовки по возрастанию line_end.sort(reverse=True) # Сортируем список окрашивания по убыванию print(line_end[0][1]) print(len(line_start) - (len(line_start + line_end) // 2))
Ошибка.
Попробуйте повторить позже
На производстве штучных изделий N деталей должны быть отшлифованы и окрашены. Для каждой детали известно время её шлифовки и время окрашивания. Детали пронумерованы начиная с единицы. Параллельная обработка деталей не предусмотрена. На ленте транспортёра имеется N мест для каждой из N деталей. Места для деталей пронумерованы начиная с единицы. На ленте транспортёра детали располагают по следующему алгоритму:
- все 2N чисел, обозначающих время окрашивания и шлифовки для N деталей, упорядочивают по возрастанию;
- если минимальное число в этом упорядоченном списке — это время шлифовки конкретной детали, то деталь размещают на ленте транспортёра на первое свободное место от её начала;
- если минимальное число — это время окрашивания, то деталь размещают на первое свободное место от конца ленты транспортёра;
Этот алгоритм применяется последовательно для размещения всех N деталей. Определите сколько деталей будет отшлифовано, и деталь с каким номером окажется на позиции с номером K на ленте транспортёра.
В первой строке входного файла находится натуральное число N (N < 1000) – количество деталей и натуральное
число K (K N). Следующие N строк содержат пары чисел, обозначающих соответственно время шлифовки и время
окрашивания конкретной детали (все числа натуральные, различные).
Запишите в ответе два натуральных числа через пробел: сначала сколько деталей будет отшлифовано, затем номер детали, которая окажется на позиции c номером K на ленте транспортёра.
file = open(’26_12933.txt’) # Kоличество деталей и номер позиции n, k = map(int, f.readline().split()) line_start = [] # Список деталей в начале ленты для шлифовки line_end = [] # Список деталей в конце ленты для окраски c = 0 # Номер детали for i in f: c += 1 # Увеличиваем номер детали t1, t2 = map(int, i.split()) # Время шлифовки и время окрашивания if t1 < t2: # Если время шлифовки меньше времени окрашивания line_start.append([t1, c]) # Добавляем деталь в начало ленты else: # Если время окрашивания не больше времени шлифовки line_end.append([t2, c]) # Добавляем деталь в конец ленты line_start.sort() # Сортируем список шлифовки по возрастанию line_end.sort(reverse=True) # Сортируем список окрашивания по убыванию res = line_start + line_end # Объединяем списки # Количество отшлифованных деталей print(len(line_start)) print(res[k-1][1]) # Номер детали на позиции c номером K на ленте
Ошибка.
Попробуйте повторить позже
На производстве штучных изделий 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])
Ошибка.
Попробуйте повторить позже
На производстве штучных изделий N деталей должны быть отшлифованы и окрашены. Для каждой детали известно время ее шлифовки и время окрашивания. Детали пронумерованы начиная с единицы. Параллельная обработка деталей не предусмотрена. На ленте транспортера имеется N мест для каждой из N деталей. На ленте транспортера детали располагают по следующему алгоритму:
– все 2N чисел, обозначающих время окрашивания и шлифовки для N деталей, упорядочивают по возрастанию;
– если минимальное число в этом упорядоченном списке – это время шлифовки конкретной детали, то деталь размещают на ленте транспортера на первое свободное место от ее начала;
– если минимальное число – это время окрашивания, то деталь размещают на первое свободное место от конца ленты транспортера;
– если число обозначает время окрашивания или шлифовки уже рассмотренной детали, то его не принимают во внимание.
Этот алгоритм применяется последовательно для размещения всех N деталей.
Определите сколько деталей будет отшлифовано и какой номер будет иметь деталь, которая была размещена на ленте последней.
Входные данные представлены в файле 26-1.txt следующим образом. Первая строка входного файла содержит
натуральное число N – количество деталей. Следующие 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])
Ошибка.
Попробуйте повторить позже
На производстве штучных изделий N деталей должны быть отшлифованы и окрашены. Для каждой детали известно время ее шлифовки и время окрашивания. Детали пронумерованы начиная с нуля. Параллельная обработка деталей не предусмотрена. На ленте транспортера имеется N мест для каждой из N деталей. На ленте транспортера детали располагают по следующему алгоритму:
– все 2N чисел, обозначающих время окрашивания и шлифовки для N деталей, упорядочивают по возрастанию;
– если максимальное число в этом упорядоченном списке – это время шлифовки конкретной детали, то деталь размещают на ленте транспортера на первое свободное место от ее начала;
– если максимальное число – это время окрашивания, то деталь размещают на первое свободное место от конца ленты транспортера;
– если число обозначает время окрашивания или шлифовки уже рассмотренной детали, то его не принимают во внимание.
Этот алгоритм применяется последовательно для размещения всех N деталей.
Определите сколько деталей будет окрашено и какой номер будет иметь последней окрашенная деталь.
Входные данные представлены в файле 26-2.txt следующим образом. Первая строка входного файла содержит
натуральное число N – количество деталей. Следующие N строк содержат пары чисел,
обозначающих соответственно время шлифовки и время окрашивания конкретной детали (все числа натуральные,
различные).
Запишите в ответе два натуральных числа через пробел: сначала количество деталей, которые будут окрашены, затем номер последней окрашенной детали.
f = open(’26_2.txt’) n = int(f.readline()) a = [list(map(int,i.split())) for i in f] t = [] #список для хранения времени, типа операции и номера на ленте для каждой детали for i in range(n): if a[i][0] > a[i][1]: t.append([a[i][0], 1, i]) else: t.append([a[i][1], 2, i]) t.sort() line_start = [] #списки для хранения деталей, которые размещаются в начале line_end = [] #списки для хранения деталей, которые размещаются в конце for i in t: #заполнение списков в зависимости от типа операции if i[1] == 1: line_start.append(i) else: line_end.append(i) print(len(line_end)) print(line_end[-1][2])
Ошибка.
Попробуйте повторить позже
На производстве штучных изделий N деталей должны быть отшлифованы и окрашены. Для каждой детали известно время ее шлифовки и время окрашивания. Детали пронумерованы начиная с единицы. Параллельная обработка деталей не предусмотрена. На ленте транспортера имеется N мест для каждой из N деталей. На ленте транспортера детали располагают по следующему алгоритму:
– все 2N чисел, обозначающих время шлифовки и окрашивания для N деталей, упорядочивают по возрастанию;
– если максимальное число в этом упорядоченном списке – это время шлифовки конкретной детали, то деталь размещают на ленте транспортера на первое свободное место от ее начала;
– если максимальное число – это время окрашивания, то деталь размещают на первое свободное место от конца ленты транспортера;
– если число обозначает время окрашивания или шлифовки уже рассмотренной детали, то его не принимают во внимание.
Этот алгоритм применяется последовательно для размещения всех N деталей.
Определите время обработки детали, которая в итоге будет стоять на ленте транспортера на 168 месте, а также суммарное время окрашивания деталей.
Входные данные представлены в файле 26-3.txt следующим образом. Первая строка входного файла содержит
натуральное число N – количество деталей. Следующие N строк содержат пары чисел,
обозначающих соответственно время шлифовки и время окрашивания конкретной детали (все числа натуральные,
различные).
Запишите в ответе два натуральных числа через пробел: сначала время обработки детали, которая в итоге будет стоять на ленте транспортера на 168 месте, а затем суммарное время окрашивания деталей.
f = open(’26_3__3whrj.txt’) n = int(f.readline()) a = [list(map(int, i.split())) for i in f] t = [] # список для хранения времени, типа операции и номера на ленте для каждой детали for i in range(n): if a[i][0] > a[i][1]: t.append([a[i][0], 1, i + 1]) else: t.append([a[i][1], 2, i + 1]) t.sort(reverse=True) lenta = [] line_start = [] # списки для хранения деталей, которые размещаются в начале line_end = [] # списки для хранения деталей, которые размещаются в конце for i in t: # заполнение списков в зависимости от типа операции if i[1] == 1: line_start.append(i) else: line_end.append(i) lenta = line_start + line_end[::-1] print(lenta[167][0], sum(x[0] for x in line_end))
Ошибка.
Попробуйте повторить позже
На производстве штучных изделий N деталей должны быть отшлифованы и окрашены. Для каждой детали известно время ее шлифовки и время окрашивания. Детали пронумерованы начиная с нуля. Параллельная обработка деталей не предусмотрена. На ленте транспортера имеется N мест для каждой из N деталей. На ленте транспортера детали располагают по следующему алгоритму:
– все 2N чисел, обозначающих время окрашивания и шлифовки для N деталей, упорядочивают по возрастанию;
– если максимальное число в этом упорядоченном списке – это время окрашивания конкретной детали, то деталь размещают на ленте транспортера на первое свободное место от ее начала;
– если максимальное число – это время шлифовки, то деталь размещают на первое свободное место от конца ленты транспортера;
– если число обозначает время окрашивания или шлифовки уже рассмотренной детали, то его не принимают во внимание.
Этот алгоритм применяется последовательно для размещения всех N деталей.
Определите сколько деталей будет окрашено и какой номер будет иметь последняя отшлифованная деталь.
Входные данные представлены в файле 26_12.txt следующим образом. Первая строка входного файла содержит
натуральное число N – количество деталей. Следующие N строк содержат пары чисел,
обозначающих соответственно время шлифовки и время окрашивания конкретной детали (все числа натуральные,
различные).
Запишите в ответе два натуральных числа через пробел: сначала количество деталей, которые будут окрашены, затем номер последней отшлифованной детали.
Решение при помощи программы:
Считаем файл и переведём числа в удобный формат (int). Выполним все действия строго по условию. Обозначим цифрой (1 или 2), что мы будем делать с каждой деталью (после сравнения времени на оба действия). Запишем в список время, действие (1 - шлифовка, 2 - окраска) и номер. После обработки каждой детали перейдём к сортировке списка. Дело за малым - распределить деталь в начало или конец. Создадим два различных списка, которые будут хранить начало и конец ленты. Проверим, если у детали стоит цифра 2, то она должна быть окрашена и размещена в начале ленты. Если же цифра 1, то размещаем деталь в конце ленты, ведь она должна быть отшлифована. Выводим количество окрашенных деталей и номер последней отшлифованной детали (её крайне легко найти по индексу -1, номер мы ставили под индексом 2).
f = open("26_12.txt") # Откроем файл n = int(f.readline()) # Считаем количество деталей отдельно a = [list(map(int, i.split())) for i in f] # Считаем все остальные строки, переведём все числа в формат int при помощи map t = [] # Cписок для хранения времени, типа операции и порядкового номера каждой детали for i in range(n): # Пройдёмся по всем деталям if a[i][0] > a[i][1]: # Если время шлифовки больше времени окрашивания t.append([a[i][0], 1, i]) # Отправляем на шлифовку. Запишем время шлифовки, 1 будет обозначать шлифовку, i - номер детали else: t.append([a[i][1], 2, i]) # Отправляем на окрашивание. Запишем время окрашивания, 2 будет обозначать окрашивание, i - номер детали t.sort() # Сортируем готовый список деталей line_start = [] # Списки для хранения деталей, которые размещаются в начале line_end = [] # Списки для хранения деталей, которые размещаются в конце for i in t: # Заполнение списков в зависимости от типа операции if i[1] == 2: # Если деталь идёт на окрашивание - ставим её на первое свободное место от начала line_start.append(i) else: # Если деталь идёт на шлифовку - ставим её на первое свободное место от конца line_end.append(i) print(len(line_start)) # Сколько деталей будет окрашено print(line_end[-1][2]) # Выведем номер (индекс 0 - время, 1 - окрашивание или шлифовка, 2 - номер) последней (индекс -1) отшлифованной детали
Ошибка.
Попробуйте повторить позже
Отдел маркетинга сети магазинов составляет рейтинг продуктов по информации об их сроках хранения с момента изготовления и после вскрытия упаковки. Для каждого продукта известен срок его хранения с момента изготовления и срок годности к употреблению после вскрытия упаковки. Продукты пронумерованы начиная с единицы. В рейтинговом списке маркетологи располагают продукты по следующему алгоритму:
– все чисел, обозначающих срок хранения и срок годности к употреблению для
продуктов, упорядочивают
по возрастанию;
– если минимальное число в этом упорядоченном списке – срок хранения, то продукт в рейтинге занимает первое свободное место от его начала;
– если минимальное число – срок годности к употреблению, то продукт занимает первое свободное место от конца рейтинга;
– если число обозначает срок хранения или срок годности к употреблению уже рассмотренного продукта, то его не принимают во внимание.
Этот алгоритм применяется последовательно для размещения всех продуктов.
Определите номер последнего продукта, для которого будет определено его место в рейтинге, и количество продуктов, которые займут в рейтинге более низкие места.
Входные данные
В первой строке входного файла находится натуральное число
– количество продуктов.
Следующие
строк содержат пары чисел, обозначающих соответственно срок хранения продукта с
момента изготовления и срок годности к употреблению после вскрытия упаковки (все числа натуральные,
различные).
Запишите в ответе два натуральных числа: сначала номер последнего продукта, для которого будет определено его место в рейтинге, затем – количество продуктов, которые займут в рейтинге более низкие места.
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)