(Л. Шастин) На автоматизированном складе товары хранятся на стеллажах (рядах). Ячейки на каждом стеллаже пронумерованы, начиная с единицы. Известно, какие ячейки на каких стеллажах уже заняты контейнерами.
Для размещения крупногабаритного оборудования требуется выделить 15 свободных ячеек подряд на одном стеллаже. Для формирования секции разрешается убрать ровно один контейнер. Если контейнер находится между двумя блоками свободных ячеек, то после его удаления эти блоки объединяются вместе с освободившейся ячейкой. При этом непосредственно слева и справа от сформированной секции из 15 свободных ячеек на том же стеллаже должны находиться занятые ячейки (для фиксации боковых перегородок).
Найдите стеллаж с наибольшим номером, на котором возможно сформировать такую секцию из 15 свободных ячеек. В ответе запишите два целых числа: наибольший номер стеллажа и наименьший номер ячейки (координату первой ячейки) в найденной секции из 15 свободных мест.
Если на подходящем стеллаже есть несколько вариантов формирования такой секции, выберите вариант с наименьшим номером начальной ячейки.
Входные данные
В первой строке входного файла находится число N — количество занятых ячеек (натуральное число, не превышающее 20 000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 100 000: номер стеллажа и номер ячейки на этом стеллаже, в которой находится контейнер.
Выходные данные
Два целых неотрицательных числа: наибольший номер стеллажа и наименьший номер ячейки в выбранной последовательности из 15 свободных мест.
Типовой пример организации входных данных
7
25 10
25 15
85 40
70 102
70 210
70 213
70 215
Для приведённого примера, при условии, что необходимо сформировать 4 свободные ячейки подряд, ответом является пара чисел: 70; 211.
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.
Как решать. Нужна секция ровно из 15 свободных ячеек подряд, ограниченная занятыми ячейками с обеих сторон.
Убрать можно один контейнер: тогда промежутки слева и справа от него сливаются вместе с его ячейкой.
Ищем стеллаж с наибольшим номером, на нём — наименьшую начальную ячейку секции.
1) Упорядочить занятые ячейки. В A — стеллаж, в B — ячейка.
В C2 ключ =A2*100001+B2, протянуть и отсортировать A2:C по C: сначала по стеллажу, внутри — по номеру ячейки.
2) Что освободится, если убрать контейнер. В D3: =ЕСЛИ(A2=A4;B4-B2-1;""), протянуть.
Соседи контейнера из строки 3 — строки 2 и 4; между ними станет свободно B4-B2-1 ячеек.
3) Начало секции. В E3: =ЕСЛИ(D3=15;B2+1;""), протянуть.
Подходящих мест на складе три: стеллаж 45000 (с 501) и стеллаж 98450 (с 1201 и с 3501).
4) Ответ. I1:
=МАКСЕСЛИ(A3:A10000;D3:D10000;15)
→ 98450; I2:
=МИНЕСЛИ(E3:E10000;A3:A10000;I1)
→ 1201 (убрали контейнер из ячейки 1205, свободны 1201…1215 между 1200 и 1216).
Ответ: 98450 1201.