Задание EGEINF6689F3: Сортировка, отбор и моделирование

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Сортировка, отбор и моделирование.

Учебные темы: Массивы и последовательности чисел. Вычисление обобщённых характеристик элементов массива или числовой последовательности (суммы, произведения, среднего арифметического, минимального и максимального элементов, количества элементов, удовлетворяющих заданному условию). Линейный поиск заданного значения в массиве. Алгоритмы работы с элементами массива с однократным просмотром массива. Сортировка одномерного массива. Простые методы сортировки (метод пузырька, метод выбора, сортировка вставками). Сортировка слиянием. Быстрая сортировка массива (алгоритм QuickSort). Двоичный поиск в отсортированном массиве.

Впишите правильный ответ.

Рисунок из условия ФИПИ

Задание выполняется с использованием прилагаемых
файлов.

При онлайн-покупке билета на концерт известно, какие места в зале уже заняты. Необходимо купить два билета на такие соседние места в одном ряду, чтобы перед ними все кресла с такими же номерами были свободны, а ряд находился как можно дальше от сцены. Если в этом ряду таких пар мест несколько, найдите пару с наибольшими номерами. В ответе запишите два целых числа: искомый номер ряда и наибольший номер места в найденной паре. Нумерация рядов и мест ведётся с 1. Гарантируется, что хотя бы одна такая пара в зале есть.

 

Входные данные

В первой строке входного файла находятся три числа: N – количество занятых мест в зале (целое положительное число,
не превышающее 10 000), M – количество рядов (целое положительное число, не превышающее 100 000) и K – количество мест в каждом ряду (целое положительное число, не превышающее 100 000). В следующих N строках находятся пары натуральных чисел: номер ряда и номер места занятого кресла соответственно (первое число не превышает значения M, а второе – K).

Выходные данные

Два целых положительных числа: наибольший номер ряда
и наибольший номер места в найденной паре кресел.

 

Типовой пример организации данных во входном файле

7 7 8

1 1

6 6

5 5

6 7

4 4

2 2

3 3

При таких исходных данных ответом является пара чисел 5 и 8. Условию задачи удовлетворяют места 7 и 8 в ряду 5: перед креслами 7 и 8 нет занятых мест и это последняя из двух возможных пар в этом ряду. В рядах 6 и 7 искомую пару найти нельзя.

 

Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемого файла.

 

Скачать файл задания (TXT, ФИПИ)


i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.10 Массивы и последовательности чисел. Вычисление обобщённых характеристик элементов массива или числовой последовательности (суммы, произведения, среднего арифметического, минимального и максимального элементов, количества элементов, удовлетворяющих заданному условию). Линейный поиск заданного значения в массиве. Алгоритмы работы с элементами массива с однократным просмотром массива. Сортировка одномерного массива. Простые методы сортировки (метод пузырька, метод выбора, сортировка вставками). Сортировка слиянием. Быстрая сортировка массива (алгоритм QuickSort). Двоичный поиск в отсортированном массиве
Тип ответа:Краткий ответ
Номер: 6689F3
НЕ РЕШЕНО Ответить

Решение задания EGEINF6689F3

Ответ: 9991 5643

Решение.

Сохраним приложенный текстовый файл под именем data.txt. Первая строка задаёт параметры задачи; её нельзя считать обычной записью данных. В программе нумерация элементов списка начинается с нуля, а номера из условия сохраняются без сдвига.

В файле N = 9990 занятых мест, M = 99938 рядов и K = 6660 мест в каждом ряду. Для каждого номера места c найдём номер первого занятого кресла f[c]. Если весь столбец свободен, положим f[c] = M + 1.

Пара мест c и c + 1 в ряду r подходит ровно тогда, когда r < f[c] и r < f[c + 1]. Эти неравенства одновременно гарантируют, что сами покупаемые кресла и все кресла перед ними свободны. Самый дальний допустимый ряд для этой пары: r = min(f[c], f[c + 1]) − 1. Значение 0 означает, что подходящего ряда для пары нет.

Перебираем все K − 1 соседние пары. Сначала максимизируем номер ряда. При равенстве выбираем наибольший правый номер места. Так явно соблюдается приоритет обоих критериев. За пределами мест 1…K пары не рассматриваются.

Для каждой пары взят её предельный ряд, поэтому более дальний ответ невозможен: он пересечёт первое занятое кресло хотя бы одного из двух столбцов. Время O(N + K), память O(K); строить всю огромную матрицу зала не требуется.

Полная программа на Python:

with open("data.txt", encoding="utf-8-sig") as f:
    n, rows, seats = map(int, f.readline().split())
    first = [rows + 1] * (seats + 1)
    for _ in range(n):
        r, s = map(int, f.readline().split())
        first[s] = min(first[s], r)
best_row = 0
best_seat = 0
for left in range(1, seats):
    r = min(first[left], first[left + 1]) - 1
    s = left + 1
    if r > best_row or (r == best_row and s > best_seat):
        best_row, best_seat = r, s
print(best_row, best_seat)

Проверка результата.

У выбранной пары левое место 5642, правое 5643. Первые занятые ряды этих столбцов: 9992 и 99939. Поэтому min(9992, 99939) − 1 = 9991. В ответе указываем правое место 5643.

Ответ: 9991 5643.

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF6689F3.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.