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

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

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

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

Задача 1#85885

В лесополосе осуществляется посадка деревьев. Причем саженцы высаживают рядами на одинаковом расстоянии.

Через какое-то время осуществляется аэросъемка, в результате которой определяется, какие саженцы прижились. Необходимо определить ряд с максимальным номером, в котором есть подряд ровно 13  неприжившихся саженцев, при условии, что справа и слева от них саженцы прижились. При аэросъемке была совершена ошибка — одно и то же дерево могло быть снято дважды. В ответе запишите сначала наибольший номер ряда, затем наименьший номер из найденных 13  неприжившихся мест в этом ряду.

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

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

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

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

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

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

Сначала перенесем данные из файла в Excel, скопировав и вставив с разделителем пробел, а также удалим первую строчку.

Настраиваемой сортировкой отсортируем в первую очередь по столбцу A  по возрастанию, во вторую - по столбцу B  по возрастанию.

PIC

PIC

Выделим полностью столбцы A  и B  , перейдём в раздел Данные и нажимаем на инструмент Удалить дубликаты, в появившемся окне выбираем Выделить все и нажимаем ОК (это удалит деревья, которые были по ошибке сняты дважды).

В LibreOffice Calc необходимо также выделить оба столбца, применить фильтр и перейти в раздел Фильтр по условию -> Стандартный фильтр.

В условиях фильтра необходимо через И выбрать столбцы A  и B  , установить значение Не пусто и поставить галочку напротив Без повторений. После чего нужно скопировать отфильтрованные значения на новый лист и работать уже там.

PIC

PIC

Чтобы определить, пропущены ли ровно 13 саженцев среди прижившихся, в ячейку C1  запишем формулу и растянем её до конца таблицы:

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

Условие A2 = A1  обеспечивает попадание двух прижившихся саженцов в один ряд, B2− B1 = 14  - равенство количества неприжившихся саженцев между прижившимися 13-и. Если условия выполнились - записываем в ячейку номер первого неприжившегося саженца из 13-и.

Отфильтруем данные по столбцу C  , убрав все нули, и получим места, для которых выполнилось условие. Значения из столбцов A  и C  последней строчки запишем в ответ.

Решение (Python)

f = open(’m4_26_18_04.txt’)

n = int(f.readline())

tr = [list(map(int, i.split())) for i in f] # считываем файл
tr.sort() # сортируем по возрастанию значения в столбцах

max_row = 0 # максимальный ряд
min_place = 10 ** 10 # минимальное подходящее место в максимальном ряду

for i in range(len(tr) - 1):
# если ряды рядом двух стоящих совпадают
    if tr[i][0] == tr[i + 1][0]:
     # если между ними есть 13 свободных мест
        if tr[i + 1][1] - tr[i][1] == 14:
            if max_row == tr[i][0]: # если номер максимального ряда совпадает с текущим рассматриваемым рядом
                min_place = min(min_place, tr[i][1] + 1) # вычисляем минимальное подходящее место в максимальном ряду
            else:
                min_place = tr[i][1] + 1
            max_row = tr[i][0]

print(max_row, min_place)

Ответ: 977 858

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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