Задача с сайта https://kpolyakov.spb.ru/
В лесополосе осуществляется посадка деревьев: саженцы высаживают рядами на одинаковом расстоянии. Спустя некоторое время с помощью аэросъемки выясняют, какие саженцы прижились. Необходимо определить ряд с максимальным номером, в котором есть подряд ровно неприжившихся саженцев при условии, что справа и слева от них саженцы прижились. В ответе запишите сначала наибольший номер ряда, затем наименьший номер неприжившегося саженца.
Входные данные представлены в файле 26-79.txt следующим образом. В первой строке записаны два числа: – количество занятых мест (натуральное число, не превышающее 10 000) и
– длина цепочки неприжившихся саженцев, которую нужно найти. Каждая из следующих
строк содержит сведения об одном прижившемся саженце – два натуральных числа, не превышающих 100000: номер ряда и номер саженца в ряду.
Пример входного файла:
6 3
40 30
40 34
50 125
50 129
50 64
50 68
В примере требуется найти 3 подряд идущих неприжившихся саженца. Ответ: 50 65.
Решение в Excel:
Открываем файл в
Данные
Текст по столбцам с разделителями – точка с запятой.
Переносим значения из первой строки вправо и удаляем ее.
Снова переходим в Данные Сортировка:
Посчитаем количество неприжившихся саженцев в ряду между прижившимися. В столбце напишем формулу
и растянем до конца вниз.
В столбце выпишем номер подходящих рядов по формуле
Выделим столбец и увидим в низу экрана максимальное значение – 2261.
С помощью фильтров находим строку с этим значением (строка 2224).
Номер прижившегося саженца – 5086 номер неприжившегося саженца – 5087.
f = open(’26-79.txt’)
n, k = map(int, f.readline().split())
# Сортировка по ряду и номеру саженца
a = sorted([list(map(int, i.split())) for i in f])
for i in range(1, len(a)-1):
# Если номер ряда совпадает и между прижившимися ровно k неприжившихся
if (a[i][0] == a[i+1][0]) and (a[i+1][1]-a[i][1]-1 == k):
# Выводим номер ряда и номер прижившихся саженцев
print(a[i], a[i+1])