Отдел маркетинга сети магазинов составляет рейтинг продуктов по информации об их сроках хранения с момента изготовления и после
вскрытия упаковки. Для каждого продукта известен срок его хранения с момента изготовления и срок годности к употреблению после вскрытия упаковки. Продукты пронумерованы начиная с единицы.
В рейтинговом списке маркетологи располагают продукты по следующему алгоритму:
– все 2N чисел, обозначающих срок хранения и срок годности к употреблению для N продуктов, упорядочивают по возрастанию;
– если минимальное число в этом упорядоченном списке – срок хранения, то продукт в рейтинге занимает первое свободное место от
его начала;
– если минимальное число – срок годности к употреблению, то продукт занимает первое свободное место от конца рейтинга;
– если число обозначает срок хранения или срок годности к употреблению уже рассмотренного продукта, то его не принимают во внимание.
Этот алгоритм применяется последовательно для размещения всех N продуктов.
Определите номер последнего продукта, для которого будет определено его место в рейтинге, и количество продуктов, которые займут в рейтинге более низкие места.
Входные данные
В первой строке входного файла находится натуральное число N (N ≤ 1000) – количество продуктов. Следующие N строк содержат пары
чисел, обозначающих соответственно срок хранения продукта с момента изготовления и срок годности к употреблению после вскрытия упаковки (все числа натуральные, различные).
Запишите в ответе два натуральных числа: сначала номер последнего продукта, для которого будет определено его место в рейтинге, затем – количество продуктов, которые займут в рейтинге более низкие места.
Решение:
Решение на Python:
with open('E:/10/26_23765.txt') as f:
N = int(f.readline())
data = []
for i in range(1, N + 1):
a, b = map(int, f.readline().split())
data.append((a, i, 'A'))
data.append((b, i, 'B'))
data.sort()
rating = [0] * N
placed = set()
left = 0
right = N - 1
last_product = 0
last_position = 0
for value, product, kind in data:
if product in placed:
continue
if kind == 'A':
rating[left] = product
last_position = left
left += 1
else:
rating[right] = product
last_position = right
right -= 1
placed.add(product)
last_product = product
lower_count = N - last_position - 1
print(last_product, lower_count)
Ответ: 564 444