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

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

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

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

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

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

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

 

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

 

Организация купила для своих сотрудников все места в нескольких подряд идущих рядах на концертной площадке. Известно, какие места уже распределены между сотрудниками. Найдите ряд
с наибольшим номером, в котором есть два соседних места, таких что слева и справа от них в том же ряду места уже распределены (заняты). Гарантируется, что есть хотя бы один ряд, удовлетворяющий этому условию. В ответе запишите два целых числа: номер ряда и наименьший номер места из найденных в этом ряду подходящих пар свободных мест.

 

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

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

 

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

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

Пример входного файла:

7

40 3

40 6

60 33

50 125

50 128

50 64

50 67

 

Условию задачи удовлетворяют три пары чисел: 40 и 4, 50 и 126,
50 и 65. Ответ для приведённого примера:

 

50

65

 

 

 

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


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

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

Ответ: 79936 78782

Решение.

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

В файле 9986 пар «ряд, занятое место». Для каждого ряда соберём множество занятых мест, затем отсортируем его. Повтор одной и той же записи, если он встретится, не должен создавать дополнительное кресло.

Пусть a и b — соседние элементы отсортированного списка занятых мест одного ряда. Между ними находятся ровно b − a − 1 свободных кресел. Нам нужны ровно два: b − a = 3. Тогда свободная пара имеет номера a + 1 и a + 2, а её непосредственные соседи a и a + 3 заняты.

Важно сравнивать именно соседние занятые места: иначе внутри промежутка может находиться ещё одно занятое кресло. У начала или конца списка пара без двух занятых соседей не подходит. Условие на свободные кресла в других рядах здесь отсутствует.

Из найденных вариантов выбираем максимальный номер ряда, а внутри него минимальное a + 1. Перебор всех соседних элементов полон, поскольку у любой требуемой свободной пары два занятых соседа обязательно последовательны в отсортированном списке. Сортировки занимают O(N log N), память O(N).

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

from collections import defaultdict
with open("data.txt", encoding="utf-8-sig") as f:
    n = int(f.readline())
    occupied = defaultdict(set)
    for _ in range(n):
        r, s = map(int, f.readline().split())
        occupied[r].add(s)
best_row = 0
best_seat = 0
for r, seats in occupied.items():
    seats = sorted(seats)
    for a, b in zip(seats, seats[1:]):
        if b - a == 3:
            s = a + 1
            if r > best_row or (r == best_row and s < best_seat):
                best_row, best_seat = r, s
print(best_row, best_seat)

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

Найдено 2002 подходящих пар по всему файлу. В выбранном ряду 79936 заняты кресла 78781 и 78784, между ними свободны 78782 и 78783. Разность номеров занятых кресел 78784 − 78781 = 3. Среди подходящих пар этого максимального ряда минимальное левое место равно 78782.

Ответ: 79936 78782.

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

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

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

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

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

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

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