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

26.05 Поиск мест на поле (билеты, саженцы, матрицы)

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

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

Задача 1#87929

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

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

В ответе запишите шесть целых чисел через пробел: сначала номер максимального ряда, а затем номера соседних пяти мест в нем в порядке возрастания.

Вложения к задаче
Показать ответ и решение

Решение (Excel/LibreOffice)

Откроем файл в электронной таблице и удалим первую строку. С помощью настраиваемой сортировки отсортируем файл следующим образом: Столбец А по убыванию и столбец В по возрастанию. В ячейку C1  запишем 0 и в ячейку C2  запишем формулу:

=ЕСЛИ(И(A1=A2;B1+6=B2);1;0)

С помощью сочетания клавиш CT RL + F  откроем меню поиска в столбце С найдём первую 1. Как видим, между местами 698 и 704 ряда 1928 есть 5 свободных мест. В ответ указываем номер ряда и номера мест в порядке возрастания.

Решение (Python)

f = open(’26_4.txt’)
n = int(f.readline())
a = [] # список, в котором будут записаны координаты занятых мест
for line in f:
    numbers = list(map(int, line.split()))
    a.append(numbers)
a = sorted(a) # сортируем по возрастанию значения в столбцах
for i in range(len(a)-1):
    # если ряд двух рядом стоящих в списке мест совпадает и между ними есть 5 свободных мест
    if (a[i][0] == a[i+1][0]) and (a[i+1][1] - a[i][1] == 6):
        print(a[i], a[i+1])

Ответ: 1928 699 700 701 702 703

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!