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

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

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

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

Задача 1#86441Максимум баллов за задание: 2

На производстве штучных изделий 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])
# так как последняя деталь будет центральной на ленте
# то до нее не будет покрашено ни одной детали

Ответ: 798 0

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

Задача 2#86442Максимум баллов за задание: 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))

Ответ: 895 17

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

Задача 3#86443Максимум баллов за задание: 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 на ленте

Ответ: 489 924

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

Задача 4#86444Максимум баллов за задание: 2

На производстве штучных изделий 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

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

Задача 5#86445Максимум баллов за задание: 2

На производстве штучных изделий 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

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

Задача 6#86446Максимум баллов за задание: 2

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

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

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

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

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

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

Определите сколько деталей будет окрашено и какой номер будет иметь последней окрашенная деталь.

Входные данные представлены в файле 26-2.txt следующим образом. Первая строка входного файла содержит натуральное число N (1 ≤ N ≤ 1000)  – количество деталей. Следующие 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])

Ответ: 277 87

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

Задача 7#86447Максимум баллов за задание: 2

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

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

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

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

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

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

Определите время обработки детали, которая в итоге будет стоять на ленте транспортера на 168 месте, а также суммарное время окрашивания деталей.

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

Ответ: 1475 616262

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

Задача 8#87933Максимум баллов за задание: 2

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

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

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

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

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

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

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

Входные данные представлены в файле 26_12.txt следующим образом. Первая строка входного файла содержит натуральное число N (1 ≤ N ≤ 10000)  – количество деталей. Следующие 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) отшлифованной детали

Ответ: 451 646

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

Задача 9#136838Максимум баллов за задание: 2

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

– все 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
Рулетка
Вы можете получить скидку в рулетке!