26.05 Поиск мест на поле (билеты, саженцы, матрицы)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
При проведении эксперимента заряженные частицы попадают на чувствительный экран, представляющий из себя матрицу размером на точек. При попадании каждой частицы на экран в протоколе фиксируются координаты попадания: номер ряда (целое число от до ) и номер позиции в ряду (целое число от до ).
Точка экрана, в которую попала хотя бы одна частица, считается светлой, точка, в которую ни одна частица не попала, — тёмной.
При анализе результатов эксперимента рассматривают группы светлых точек, расположенных в одном ряду подряд, то есть без тёмных точек между ними.
Вам необходимо по заданному протоколу определить максимальную длину такой группы и номер ряда, в котором эта группа встречается. Если таких рядов несколько, укажите минимально возможный номер.
Входные данные:
Первая строка входного файла содержит целое число — общее количество частиц, попавших на экран. Каждая из следующих строк содержит целых числа: номер ряда и номер позиции в ряду.
В ответе запишите два целых числа: сначала максимальную длину непрерывной группы светлых точек, затем – номер ряда, в котором эта группа встречается.
Пример входного файла:
При таких исходных данных имеется три группы светлых точек: в позициях ряда , в позициях ряда и в позиции ряда . Самая длинная группа длины находится во ряду. Ответ: .
Решение 1 (Excel/LibreOffice)
Откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice.
Воспользуемся настраиваемой сортировкой, на первый уровень расположим столбец (по возрастанию), на второй -
столбец (по возрастанию). Выделим полностью столбцы A и B , перейдём в раздел "Данные"и нажимаем на инструмент
"Удалить дубликаты в появившемся окне выбираем "Выделить все"и нажимаем "ОК"(это удалит частицы, которые были
по ошибке сняты дважды). В ячейку запишем , а в - формулу =ЕСЛИ(И(A2=A1;B2-1=B1);C1+1;1), скопируем
её на все свободные клеточки этого столбца. Находим максимальную длину группы точек в столбце и номер ряда, в
котором эта группа встречается. Выписываем этот номер и наименьший номер ряда, где нашлись обозначенные в задаче
точки.
Решение 2 (Python)
f = open(’Задание_26__lood__rjlq.txt’) n = int(f.readline()) a = [[0] * 10001 for j in range(10001)] # создаём пустую матрицу maxim = 0 # максимальная длина row = 0 # ряд for i in range(n): x, y = [int(s) for s in f.readline().split()] # считывание текущей строки a[x][y] = 1 # помечаем, что данный пиксель на матрице занят for i in range(10001): counter = 0 # счётчик подряд идущих светлых точек в ряду for j in range(10001): if a[i][j] == 1: counter += 1 else: counter = 0 if counter > maxim: # если счётчик больше максимума maxim = counter # перезаписываем максимум row = i # записываем ряд print(maxim, row)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
Организация купила для своих сотрудников все места в нескольких рядах на стадионе. Известно, какие места уже распределены между сотрудниками. Найдите ряд с наименьшим номером, в котором есть четыре соседних места, таких что слева и справа от них в том же ряду места уже распределены (заняты). Гарантируется, что есть хотя бы один ряд, удовлетворяющий условию. По заданной информации определите минимальный номер ряда, удовлетворяющего условию, и наибольший номер места из найденных в этом ряду четверок мест.
Входные и выходные данные
В первой строке входного файла находится одно число: — количество занятых мест (натуральное число, не превышающее ). В следующих строках находятся пары чисел: ряд и место выкупленного билета (числа не превышают ).
Пример входных данных:
При таких исходных данных ответ должен содержать числа: — минимальный номер ряда, и — наибольший номер места из выбранной четверки в ряду (была выбрана четверка с номерами ).
Решение 1 (Excel/LibreOffice)
Откроем текстовый документ. Запомним первое число и удалим его. Скопируем все числа в Excel или LibreOffice. В
разделе Главная Сортировка и фильтр Настраиваемая сортировка делаем сортировку столбцов:
В ячейке записываем формулу:
=ЕСЛИ(И(A2=A1;B2=B1+5);"НАШЁЛ";0),
В ячейке записываем формулу:
=ЕСЛИ(И(A3=A2;ИЛИ(B3=B2+5;B3=B1+5));"НАШЁЛ";0),
В ячейке записываем формулу:
=ЕСЛИ(И(A4=A3;ИЛИ(B4=B3+5;B4=B2+5;B4=B1+5));"НАШЁЛ";0),
В ячейке записываем формулу:
=ЕСЛИ(И(A5=A4;ИЛИ(B5=B4+5;B5=B3+5;B5=B2+5;B5=B1+5));"НАШЁЛ";0),
В ячейке записываем формулу:
=ЕСЛИ(И(A6=A5;ИЛИ(B6=B5+5;B6=B4+5;B6=B3+5;B6=B2+5;B6=B1+5));"НАШЁЛ";0)
и растягиваем её на диапазон . Наводим курсор на столбец , нажимаем на Главная Сортировка и
фильтр Фильтр. Сортируем столбец по критерию "НАШЁЛ". Видим, что наименьший номер ряда — , а
наибольшее место — .
Решение 2 (Python)
f = open(’Задание_26__mixo__t7qt.txt’) n = int(f.readline()) max_row = 0 # максимальный ряд в файле max_seat = 0 # максимальное место в ряду в файле for i in range(n): x, y = map(int, f.readline().split()) # считываем текущую строку max_row = max(max_row, x) max_seat = max(max_seat, y) a = [] # матрица занятых и пустых мест for i in range(max_row+1): # проход до значения максимального ряда в файле a.append([0]*(max_seat+1)) # добавление мест f.close() f = open(’Задание_26__mixo__t7qt.txt’) n = int(f.readline()) for i in range(n): x, y = map(int, f.readline().split()) a[x][y] = 1 # отмечаем, что место - занято maxim = 0 for i in range(max_row+1): # проход по рядам for j in reversed(range(max_seat)): # проход по местам ряда if a[i][j] == 1 and a[i][j-5] == 1: maxim = j - 1 break if maxim != 0: print(i, maxim) break
Ошибка.
Попробуйте повторить позже
Организация купила для своих сотрудников все места в нескольких подряд идущих рядах на концертной площадке. Известно, какие места уже распределены между сотрудниками. Найдите ряд с наименьшим номером, в котором есть три соседних свободных места, таких что слева и справа от них в том же ряду места уже распределены (заняты). Гарантируется, что есть хотя бы один ряд, удовлетворяющий условию.
Входные данные:
В первой строке входного файла находится одно число: — количество занятых мест (натуральное число, не превышающее ). В следующих строках находятся пары чисел: ряд и место выкупленного билета, не превышающие .
В ответе запишите два целых числа: номер ряда и средний номер места в наибольшей тройке из найденных в этом ряду подходящих троек.
Пример входного файла:
В данном примере есть следующие свободные места, удовлетворяющие условию: в ряду , а также в ряду . Выбираем наименьший номер ряда: и средний номер места: . В ответе нужно указать: .
Решение 1 (Excel/LibreOffice)
Откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice.
Воспользуемся настраиваемой сортировкой, на первый уровень расположим столбец (по возрастанию), на второй -
столбец (по возрастанию). В ячейку запишем , а в - формулу =ЕСЛИ(И(A2=A1;B2-4=B1);1;0), скопируем
её на все свободные клеточки этого столбца. Далее находим первый ряд, в котором появилась 1 – это 136. Остается только
среди этого ряда найти последнюю единичку, она находится в строке с местом 299. Следовательно среднее место среди этих
свободных – 297.
Решение 2 (Python)
f = open(’26.txt’) n = int(f.readline()) max_ryad = 0 # максимальный ряд в файле max_mesto = 0 # максимальный место в ряду в файле for i in range(n): x, y = map(int, f.readline().split()) max_ryad = max(max_ryad, x) max_mesto = max(max_mesto, y) a = [] # матрица занятых и пустых мест for i in range(max_ryad + 1): # проход до максимального значения ряда в файле a.append([0] * (max_mesto + 1)) # добавление ряда мест f.close() f = open(’26.txt’) n = int(f.readline()) for i in range(n): x, y = map(int, f.readline().split()) a[x][y] = 1 # отмечаем, что данное место - занято maxim = 0 for i in range(max_ryad + 1): for j in reversed(range(max_mesto)): # проверка, что между двумя занятыми местами есть 3 свободных места if a[i][j] == 1 and a[i][j - 4] == 1 and a[i][j - 3] == 0 and \ a[i][j - 2] == 0 and a[i][j - 1] == 0: maxim = j - 2 break if maxim != 0: print(i, maxim) break
Ошибка.
Попробуйте повторить позже
В лесополосе осуществляется посадка деревьев. Причем саженцы высаживают рядами на одинаковом расстоянии.
Через какое-то время осуществляется аэросъемка, в результате которой определяется, какие саженцы прижились. Необходимо определить ряд с максимальным номером, в котором есть подряд ровно неприжившихся саженцев, при условии, что справа и слева от них саженцы прижились. В ответе запишите сначала наибольший номер ряда, затем наименьший номер из неприжившихся мест.
Входные данные:
В первой строке входного файла находится число — количество занятых мест (натуральное число, не превышающее ). Каждая из следующих строк содержит два натуральных числа, не превышающих : номер ряда и номер занятого места.
Выходные данные:
Два целых неотрицательных числа: максимальный номер ряда, где нашлись обозначенные в задаче места, и минимальный номер подходящего места.
Пример входного файла:
Ответ для примера (при поиске подряд идущих неприжившихся саженцах):
Решение 1 (Excel/LibreOffice)
Откроем текстовый документ. Запомним первое число и удалим его. Скопируем все числа в Excel. В разделе Главная
Сортировка и фильтр Настраиваемая сортировка делаем сортировку столбцов:
В ячейке записываем формулу =ЕСЛИ(И(A2=A1;B2=B1+8);"НАШЁЛ";0) и растягиваем её на диапазоне
. Наводим курсор на столбец , нажимаем на Главная Сортировка и фильтр Фильтр.
Сортируем столбец по критерию "НАШЁЛ". Получаем единственный номер ряда — и наименьший номер
неприжившегося саженца — .
Решение 2 (Python)
f = open(’Задание_26__o4nj__rs6l.txt’) n = int(f.readline()) a = [] # список координат прижившихся саженцев for i in range(n): x, y = [int(_) for _ in f.readline().split()] # считывание текущей строки a.append([x, y]) a.sort() ans = [0, 0] for i in range(n - 1): # проход по всем координатам прижившихся саженцев # если ряд двух рядом стоящих в списке саженцев совпадает и при этом между ними есть 7 свободных мест if a[i][0] == a[i + 1][0] and a[i][1] == a[i + 1][1] - 8: row = a[i][0] # вычисляем ряд place = a[i][1] + 1 # вычисляем минимальное свободное место между двумя саженцами if row > ans[0]: ans[0] = row ans[1] = place print(*ans)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
Организация купила для своих сотрудников все места в нескольких подряд идущих рядах на концертной площадке. Известно, какие места уже распределены между сотрудниками. Найдите ряд с наибольшим номером, в котором есть два соседних места, таких что слева и справа от них в том же ряду места уже распределены (заняты). Гарантируется, что есть хотя бы один ряд, удовлетворяющий условию. В ответе запишите два целых числа: номер ряда и наименьший номер места из найденных в этом ряду подходящих пар.
Входные данные:
В первой строке входного файла находится одно число: — количество занятых мест (натуральное число, не превышающее ). В следующих строках находятся пары чисел: ряд и место выкупленного билета (числа не превышают ).
В ответе запишите два целых числа: сначала максимальный номер ряда, где нашлись обозначенные в задаче места и минимальный номер места.
Пример входного файла:
Для данного примера ответом будет являться пара чисел и .
Решение 1 (Excel/LibreOffice)
Откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice.
Воспользуемся настраиваемой сортировкой, на первый уровень расположим столбец (по убыванию), на второй - столбец
(по возрастанию). В ячейку запишем , а в - формулу =ЕСЛИ(И(A1=A2;B2=B1+3);C1+1;1), скопируем её
на все свободные клеточки этого столбца. Находим максимальное значение номера ряда, где нашлись обозначенные в
задаче места, и среди них находим то, что имеет наименьший номер места. Выписываем этот номер и наименьший номер
места из найденных в этом ряду подходящих пар.
Решение 2 (Python)
f = open(’26__t72u.txt’) n = int(f.readline()) a = []# список координат занятых мест саженцев for i in range(n): x, y = [int(_) for _ in f.readline().split()] # считывание текущей строки a.append([x, y]) a.sort() ans = [0, 0] for i in range(n - 1): # проход по всем координатам занятых мест # если ряд двух рядом стоящих в списке занятых мест совпадает и при этом между ними есть 2 свободных места if a[i][0] == a[i + 1][0] and a[i][1] == a[i + 1][1] - 3: row = a[i][0] # вычисляем ряд seat = a[i][1] + 1 # вычисляем минимальное свободное место между двумя креслами if row > ans[0]: ans[0] = row ans[1] = seat print(*ans)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
В лесополосе осуществляется посадка деревьев. Причем деревья высаживают рядами на одинаковом расстоянии. Между соседними деревьями в одном ряду расстояние метров.
Через какое-то время осуществляется аэросъемка, в результате которой определяется, какие деревья прижились. Для успешного перекрестного опыления необходимо, чтобы дерево было на расстоянии не более метров от прижившегося дерева, иначе оно не будет плодоносить. При аэросъемке была совершена ошибка — одно и то же дерево могло быть снято дважды. Определите, какое минимальное количество деревьев нужно посадить, чтобы все деревья могли плодоносить, и номер ряда, в котором необходимо посадить максимальное количество деревьев. Если таких рядов несколько, нужно найти номер первого из них.
Входные данные:
В первой строке входного файла находится число — количество занятых мест. Каждая из следующих строк содержит два натуральных числа, не превышающих : номер ряда и номер занятого места.
Выходные данные:
Два целых неотрицательных числа: минимальное количество деревьев которое нужно посадить, чтобы все деревья могли плодоносить, и минимальный номер ряда, в котором необходимо посадить максимальное количество деревьев.
Пример входного файла:
В этом случае достаточно посадить дерева в позициях , , и . Наибольшее количество деревьев нужно посадить в 7-м ряду. Ответ: .
Решение 1 (Excel/LibreOffice)
Откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice.
Удалим значение количества занятых мест. Воспользуемся настраиваемой сортировкой, на первый уровень расположим
столбец (по возрастанию), на второй - столбец (по возрастанию). Выделим полностью столбцы
и , перейдём в раздел Данные и нажимаем на инструмент Удалить дубликаты, в появившемся окне
выбираем Выделить все и нажимаем ОК (это удалит деревья, которые были по ошибке сняты дважды).
Добавляем пустую строку перед самой первой (нажимаем правой кнопкой мыши на строку и выбираем Вставить).
Введём обозначения каждого столбца, в которые будем записывать формулы: столбец — Можно ли опылить текущее
дерево предыдущим?, столбец — Можно ли опылить текущее дерево следующим?, столбец — Можно ли опылить
текущее дерево дополнительно высаженным до него деревом?, столбец — Высаживаем дополнительное
дерево, столбец — Было ли высажено дерево?, столбец — Счётчик количества деревьев в каждом
ряду.
В ячейку запишем формулу =И(A2=A3;B3-B2<=2), в — =И(A3=A4;B4-B3<=2), в - =И(A3=A2;B3-F2<=2), в
— =ЕСЛИ(ИЛИ(C3:E3);-1000000;B3+2), в — =ЕСЛИ(F3>0;1;0). Выделим все эти ячейки, скопируем и
вставим на все столбцы . Считаем общее количество высаженных деревьев — =СУММ(G3:G9944).
В ячейку запишем 1, а в — формулу =ЕСЛИ(A3=A4;H3+G4;1), скопируем её и вставим на все оставшиеся
клеточки столбца . Находим в этом столбце максимальное значение, равное 19. Теперь найдём ряд, в котором
необходимо посадить это максимальное количество деревьев.
Решение 2 (Python)
f = open(’Задание 26.txt’) n = int(f.readline()) max_place = 0 max_row = 0 for i in range(n): a, b = map(int, f.readline().split()) max_row = max(a, max_row) max_place = max(b, max_place) f.close() f = open(’Задание 26.txt’) n = int(f.readline()) arr = [] for i in range(max_row + 1): arr.append([0]*(max_place + 3)) for i in range(n): a, b = map(int, f.readline().split()) arr[a][b] = 1 counter = 0 maxim = 0 maxim_row = 0 for i in range(max_row + 1): temp = 0 for j in range(max_place + 1): if arr[i][j] == 1: if arr[i][j+2] == 0 and arr[i][j-2] == 0 and arr[i][j+1] == 0 and arr[i][j-1] == 0: arr[i][j+2] = 1 counter += 1 temp += 1 if maxim < temp: maxim = temp maxim_row = i print(counter, maxim_row)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
Организация купила для своих сотрудников все места в нескольких подряд идущих рядах на концертной площадке. Известно, какие места уже распределены между сотрудниками. Найдите ряд с наименьшим номером, в котором есть три свободных соседних места, таких что слева и справа от них в том же ряду места уже распределены (заняты). Гарантируется, что есть хотя бы один ряд, удовлетворяющий условию.
Входные данные:
В первой строке входного файла находится одно число: — количество занятых мест (натуральное число, не превышающее ). В следующих строках находятся пары чисел: ряд и место выкупленного билета, не превышающие .
В ответе запишите два целых числа: номер ряда и средний номер места в наибольшей тройке из найденных в этом ряду подходящих троек.
Пример входного файла:
В данном примере есть следующие свободные места, удовлетворяющие условию: в ряду , а также в ряду . Выбираем наименьший номер ряда: и средний номер места: . В ответе нужно указать: .
Решение 1 (Excel/LibreOffice)
Откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice.
Воспользуемся настраиваемой сортировкой, на первый уровень расположим столбец (по возрастанию), на второй -
столбец (по возрастанию). В ячейку запишем , а в - формулу =ЕСЛИ(И(A2=A1;B2-4=B1);C1+1;1),
скопируем её на все свободные клеточки этого столбца. Находим максимальное значение в столбце . Выписываем в ответ
минимальный номер ряда, где встречается это значение, и максимальный средний номер среди имеющихся троек в данном
ряду.
Решение 2 (Python)
f = open(’task_2__pza7__taen.txt’) n = int(f.readline()) mass = [] # список координат занятых мест for i in range(n): x, y = [int(_) for _ in f.readline().split()] # считывание текущей строки mass.append([x, y]) mass.sort() # проход по занятым местам for i in range(n-1): # если места расположены на одном ряду и между ними есть 3 свободных места if mass[i][0] == mass[i+1][0] and mass[i][1] + 4 == mass[i+1][1]: print(mass[i][0],mass[i][1]+2)
Ошибка.
Попробуйте повторить позже
Организация купила для своих сотрудников все места в нескольких подряд идущих рядах на концертной площадке. Известно, какие места уже распределены между сотрудниками. Найдите ряд с наименьшим номером, в котором есть два соседних свободных места, где слева и справа от них есть занятые места. Гарантируется, что есть хотя бы один ряд, удовлетворяющий условию.
Входные данные
В первой строке входного файла находится одно число: — количество занятых мест (натуральное число, не превышающее ). В следующих строках находятся пары чисел: ряд и место выкупленного билета, не превышающие
Выходные данные
В ответе запишите два целых числа: наименьший номер ряда и наибольший номер места из найденных в этом ряду подходящих пар.
Пример входного файла:
В данном примере есть следующие свободные места, удовлетворяющие условию: и в ряду , и в ряду , а также и в ряду . Выбираем наименьший номер ряда: и наибольший номер места: . В ответе нужно указать: .
Решение 1 (Excel/LibreOffice)
Откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice.
Воспользуемся настраиваемой сортировкой, на первый уровень расположим столбец , на второй столбец . В ячейке
запишем , а в - формулу =ЕСЛИ(И(A1=A2;(B2-B1)=3);1;0), скопируем её на все свободные клеточки этого
столбца. Находим первую встреченную единичку, записываем в ответ найденные значения номеров ряда и места (последнее
свободное место - это место на меньше того, которое записано в найденной строке), соответствующие данной единице.
Решение 2 (Python)
f = open(’Задание_26__qjvc__t6o2.txt’) n = int(f.readline()) mass = [] # список координат занятых мест for i in range(n): x, y = [int(_) for _ in f.readline().split()] # считывание текущей строки mass.append([x, y]) mass.sort() # проход по занятым местам for i in range(n-1): # если места расположены на одном ряду и между ними есть 2 свободных места if mass[i][0] == mass[i+1][0] and mass[i][1] + 3 == mass[i+1][1]: print(mass[i][0],mass[i][1]+2) break
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
Организация купила для своих сотрудников все места в нескольких подряд идущих рядах на концертной площадке. Известно, какие места уже распределены между сотрудниками. Найдите ряд с наибольшим номером, в котором есть занятое место, такое что слева и справа от него в том же ряду места уже распределены (заняты). Гарантируется, что есть хотя бы один ряд, удовлетворяющий условию.
Входные данные:
В первой строке входного файла находится одно число: — количество занятых мест (натуральное число, не превышающее ). В следующих строках находятся пары чисел: ряд и место выкупленного билета, не превышающие .
В ответе запишите два целых числа: максимальный номер ряда и максимальный номер места, удовлятворяющие условию.
Пример входного файла:
В данном примере условию удовлетворяют ряд и -е место. В ответе нужно указать: .
Решение (Excel/LibreOffice)
Откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice.
Воспользуемся настраиваемой сортировкой, на первый уровень расположим столбец (по убыванию), на второй - столбец
(по возрастанию). В ячейку запишем формулу =ЕСЛИ(И(A1=A3;B1+2=B3);1;0), скопируем её на все свободные
клеточки этого столбца. Находим первую единицу в столбце . Выписываем в ответ максимальный номер ряда и номер
места.
Решение (Python)
f = open(’26__14es9.txt’) n = int(f.readline()) mass = [] # список координат занятых мест for i in range(n): x, y = [int(_) for _ in f.readline().split()] # считывание текущей строки mass.append([x, y]) mass.sort() # проход по занятым местам for i in range(n-2): # если есть такое место, у которого соседнее левое место и соседнее правое - заняты if mass[i][0] == mass[i+1][0] == mass[i+2][0] and mass[i][1] + 1 == mass[i+1][1] and mass[i+1][1] + 1 == mass[i+2][1]: print(mass[i+1][0],mass[i+1][1])
Ошибка.
Попробуйте повторить позже
Организация купила для своих сотрудников все места в нескольких подряд идущих рядах на концертной
площадке. Известно, какие места уже распределены между сотрудниками. Найдите ряд с наибольшим
номером, в котором есть два соседних места, таких что слева и справа от них в том же ряду места уже
распределены (заняты). Гарантируется, что есть хотя бы один ряд, удовлетворяющий условию. В ответе
запишите два целых числа: номер ряда и наибольший номер места из найденных в этом ряду подходящих
пар.
Входные данные.
В первой строке входного файла 9.txt находится одно число: N — количество занятых мест (натуральное число, не
превышающее 10000). В следующих N строках находятся пары чисел: ряд и место выкупленного билета (числа не
превышают 100000).
В ответе запишите два целых числа через пробел: сначала максимальный номер ряда, где нашлись обозначенные в
задаче места и максимальный номер места.
Пример входного файла:
6
50 12
50 15
60 157
60 160
60 22
60 25
Для данного примера ответом будет являться пара чисел 60 и 159.
Решение (Excel/LibreOffice)
Откроем файл в электронной таблице, удалим первую строчку и отсортируем с помощью настраиваемой сортировки следующим образом: Столбец А по убыванию и столбец B по убыванию. В ячейку С1 запишем 0, а в ячейку С2 запишем следующую формулу:
=ЕСЛИ(И(A1=A2;B1-3=B2);1;0)
Сочетанием клавиш Ctrl+F откроем меню поиска и в столбце С найдем первую единицу. Как видно, между местами 225 и 228 ряда 20164 есть два свободных места. В ответ нужно указать максимальное место этой пары. Ответ: 20164 227
Решение (Python)
f = open(’D:/9.txt’) n = int(f.readline()) a = [] for i in range(n): a.append(list(map(int, f.readline().split()))) a = sorted(a) mr = 0 # Наибольшее значение ряда mm = 0 # Наибольшее значение места for i in range(n-1): # Во втором выражении разность должна быть равна 3, # чтобы понять, что между двумя местами есть два свободных места if a[i][0] == a[i+1][0] and abs(a[i][1] - a[i+1][1]) == 3: mr = a[i][0] # Номер второго занятого места минус 1 # это наибольший номер свободного места из пары # (т.е. находящийся левее от второго занятого места из пары) mm = a[i+1][1]-1 print(mr, mm)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
При проведении эксперимента заряженные частицы попадают на чувствительный экран, представляющий из себя матрицу размером на точек. При попадании каждой частицы на экран в протоколе фиксируются координаты попадания: номер ряда (целое число от до ) и номер позиции в ряду (целое число от до ). Точка экрана, в которую попала хотя бы одна частица, считается светлой, точка, в которую ни одна частица не попала, — тёмной. При анализе результатов эксперимента рассматривают группы светлых точек, расположенных в одном ряду подряд, то есть без тёмных точек между ними. Вам необходимо по заданному протоколу определить максимальную длину такой группы и номер ряда, в котором эта группа встречается. Если таких рядов несколько, укажите минимально возможный номер.
Входные данные
Первая строка входного файла содержит целое число — общее количество частиц, попавших на экран. Каждая из следующих строк содержит целых числа: номер ряда и номер позиции в ряду.
Выходные данные
В ответе запишите два целых числа через пробел: сначала максимальную длину непрерывной группы светлых точек, затем – номер ряда, в котором эта группа встречается.
Пример входного файла:
При таких исходных данных имеется три группы светлых точек: в позициях ряда , в позициях ряда и в позиции ряда . Самая длинная группа длины находится во ряду. Ответ: .
Решение 1 (Excel/LibreOffice)
Откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice.
Воспользуемся настраиваемой сортировкой, на первый уровень расположим столбец (по возрастанию), на второй -
столбец (по возрастанию). Выделим полностью столбцы A и B , перейдём в раздел "Данные"и нажимаем на инструмент
"Удалить дубликаты в появившемся окне выбираем "Выделить все"и нажимаем "ОК"(это удалит частицы, которые были
по ошибке сняты дважды). В ячейку запишем , а в - формулу =ЕСЛИ(И(A2=A1;B2-B1=1);C1+1;1), скопируем
её на все свободные клеточки этого столбца. Находим максимальную длину группы точек в столбце и номер ряда, в
котором эта группа встречается. Выписываем этот номер и наименьший номер ряда, где нашлись обозначенные в задаче
точки.
Решение 2 (Python)
f = open(’26__1r21f.txt’) n = int(f.readline()) a = [[0] * 10001 for j in range(10001)] # матрица, в которой 1 будут указаны занятые пиксели, 0 - свободные пиксели maxim = 0 row = 0 for i in range(n): x, y = [int(s) for s in f.readline().split()] a[x][y] = 1 # отмечаем, что данный пиксель занят for i in range(10001): counter = 0 # счетчик подряд идущих занятых пикселей for j in range(10001): if a[i][j] == 1: counter += 1 else: counter = 0 if counter > maxim: # если счётчик больше максимума maxim = counter # перезаписываем максимум row = i # записываем ряд print(maxim, row)
Ошибка.
Попробуйте повторить позже
Организация купила для своих сотрудников все места в нескольких подряд идущих рядах на концертной площадке. Известно, какие места уже распределены между сотрудниками. Найдите ряд с наибольшим номером, в котором есть три соседних места, таких что слева и справа от них в том же ряду места уже распределены (заняты). Гарантируется, что есть хотя бы один ряд, удовлетворяющий условию.
Входные данные.
В первой строке входного файла 26.txt находится одно число: N — количество занятых мест (натуральное число, не
превышающее 10 000). В следующих N строках находятся пары чисел: ряд и место выкупленного билета (числа не
превышают 100 000).
В ответе запишите два целых числа без пробела: сначала максимальный номер ряда, где нашлись обозначенные в
задаче места и минимальный номер места.
Пример входного файла:
6
50 11
50 15
60 156
60 160
60 21
60 25
Для данного примера ответом будет являться пара чисел 60 и 22.
Решение (Excel/LibreOffice)
Откроем текстовый документ. Запомним первое число и удалим его. Скопируем все числа в Excel или LibreOffice. Теперь воспользуемся настраиваемой сортировкой и отсортируем файл следующим образом: Столбец А (по убыванию) и столбец В (по возрастанию). В ячейку запишем 0, а в ячейку запишем формулу:
=ЕСЛИ(И(A1=A2;B1+4=B2);1;0)
Сочетанием клавиш откроем меню поиска и в столбце С найдём первую 1. Как видим, между местами 75 и 79 ряда 25081 есть три места. По условию, в ответ нужно указать минимальное место из трёх свободных. Ответ: 2508176
Решение (Python)
f = open(’26__1jdz6.txt’) n = int(f.readline()) a = [] # список координат занятых мест for i in range(n): x, y = [int(_) for _ in f.readline().split()] # считывание текущей строки a.append([x, y]) a.sort() ans = [0, 0] for i in range(n-1): # проход по всем координатам занятых мест # если ряд двух рядом стоящих в списке мест совпадает и при этом между ними есть 3 свободных мест if a[i][0] == a[i + 1][0] and a[i][1]+4 == a[i+1][1]: row = a[i][0] # вычисляем ряд place = a[i][1] + 1 # вычисляем минимальное свободное место if row > ans[0]: ans[0] = row ans[1] = place print(*ans)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов
В лесополосе осуществляется посадка деревьев. Причем деревья высаживают рядами на одинаковом расстоянии. Между соседними деревьями в одном ряду расстояние метров.
Через какое-то время осуществляется аэросъемка, в результате которой определяется, какие деревья прижились. Для успешного перекрестного опыления необходимо, чтобы дерево было на расстоянии не более метров от прижившегося дерева, иначе оно не будет плодоносить. При аэросъемке была совершена ошибка — одно и то же дерево могло быть снято дважды. Определите, какое минимальное количество деревьев нужно посадить, чтобы все деревья могли плодоносить, и номер ряда, в котором необходимо посадить максимальное количество деревьев. Если таких рядов несколько, нужно найти номер первого из них. Если дерево можно посодить в нескольких местах между двумя другими так, что оно будет соседом для обоих, оно садится на максимальном отдалении от дерева с меньшим номером, дерево не может быть посажено за пределами существующего поля.
Входные данные:
В первой строке входного файла находится число — количество занятых мест. Каждая из следующих строк содержит два натуральных числа, не превышающих : номер ряда и номер занятого места.
Выходные данные:
Два целых неотрицательных числа: минимальное количество деревьев которое нужно посадить, чтобы все деревья могли плодоносить, и минимальный номер ряда, в котором необходимо посадить максимальное количество деревьев.
Пример входного файла:
В этом случае достаточно посадить дерева в позициях , , и . Наибольшее количество деревьев нужно посадить в 7-м ряду. Ответ: .
Решение 1 (Excel/LibreOffice)
Откроем текстовый документ, скопируем значения и перенесем их в Excel или LibreOffice.
Удалим значение количества занятых мест. Воспользуемся настраиваемой сортировкой, на первый уровень расположим
столбец (по возрастанию), на второй - столбец (по возрастанию). Выделим полностью столбцы и , перейдём в
раздел Данные и нажимаем на инструмент Удалить дубликаты, в появившемся окне выбираем Выделить все и нажимаем
ОК (это удалит деревья, которые были по ошибке сняты дважды).
Добавляем пустую строку перед самой первой (нажимаем правой кнопкой мыши на строку и выбираем Вставить).
Введём обозначения каждого столбца, в которые будем записывать формулы: столбец — Можно ли опылить текущее
дерево предыдущим?, столбец — Можно ли опылить текущее дерево следующим?, столбец — Можно ли опылить
текущее дерево дополнительно высаженным до него деревом?, столбец — Высаживаем дополнительное
дерево, столбец — Было ли высажено дерево?, столбец — Счётчик количества деревьев в каждом
ряду.
В ячейку запишем формулу =И(A1=A1;B2-B1<=2), в — =И(A2=A3;B3-B2<=2), в - =И(A2=A1;B2-F1<=2), в
— =ЕСЛИ(ИЛИ(C2:E2);-1000000;ЕСЛИ(B2+2>=МАКС(B:B);B2-2;B2+2)), в — =ЕСЛИ(F2>0;1;0). Выделим все
эти ячейки, скопируем и вставим на все столбцы . Считаем общее количество высаженных деревьев —
=СУММ(G:G).
В ячейку запишем 1, а в — формулу =ЕСЛИ(A2=A3;H2+G3;1), скопируем её и вставим на все оставшиеся
клеточки столбца . Находим в этом столбце максимальное значение, равное 19. Теперь найдём ряд, в котором
необходимо посадить это максимальное количество деревьев.
Решение 2 (Python)
f = open(’Задание 26.txt’) n = int(f.readline()) max_place = 0 max_row = 0 for i in range(n): a, b = map(int, f.readline().split()) max_row = max(a, max_row) max_place = max(b, max_place) f.close() f = open(’Задание 26.txt’) n = int(f.readline()) arr = [] for i in range(max_row + 1): arr.append([0]*(max_place + 3)) for i in range(n): a, b = map(int, f.readline().split()) arr[a][b] = 1 counter = 0 maxim = 0 maxim_row = 0 for i in range(max_row + 1): temp = 0 for j in range(max_place + 1): if arr[i][j] == 1: if arr[i][j+2] == 0 and arr[i][j-2] == 0 and arr[i][j+1] == 0 and arr[i][j-1] == 0: if j+2 >= max_place: arr[i][j-2] = 1 else: arr[i][j+2] = 1 counter += 1 temp += 1 if maxim < temp: maxim = temp maxim_row = i print(counter, maxim_row)
Ошибка.
Попробуйте повторить позже
Организация купила для своих сотрудников все места в нескольких подряд идущих рядах на концертной площадке.
Известно, какие места уже распределены между сотрудниками. Найдите ряд с наименьшим номером, в котором есть
два соседних места, таких что слева и справа от них в том же ряду места уже распределены (заняты). Гарантируется,
что есть хотя бы один ряд, удовлетворяющий условию.
Входные данные.
В первой строке входного файла 26_8.txt находится одно число: N — количество занятых мест (натуральное число, не
превышающее 10000). В следующих N строках находятся пары чисел: ряд и место выкупленного билета (числа не
превышают 100000).
В ответе запишите два целых числа без пробелов и разделителей: сначала наименьший номер ряда, где нашлись
обозначенные в задаче места и наименьший номер места в этом ряду.
Пример входного файла:
6
50 12
50 15
60 157
60 160
60 22
60 25
Для данного примера ответом будет являться пара чисел 50 и 13.
Решение (Excel/LibreOffice)
1. Сначала переносим столбец с рядами и местами из текстового файла в Excel, а затем сортируем столбец А по
возрастанию, после сортируем столбец В по возрастанию. Таким образом получится, что в файле сначала идут ряды от
наименьших к наибольшим с упорядоченными местами
2. Далее в ячейке С2 пишем следующую формулу: =ЕСЛИ(A2=A1;B2-B1;0). Так мы считаем разницу между местами,
если они находятся в одном ряду.
3. Теперь пробегаемся по столбцу С и ищем первую попашуюся тройку. Она находится в ячейке С13 и связывает 136
ряд и места 114 и 117. Тогда наименьший ряд 136, а наименьшее место 115.
Решение (Python)
f = open(’26_8__1kubw.txt’) n = int(f.readline()) a = [] # список координат занятых мест for i in range(n): x, y = [int(_) for _ in f.readline().split()] # считывание текущей строки a.append([x, y]) a.sort() ans = [0, 0] for i in range(n-1): # проход по всем координатам занятых мест # если ряд двух рядом стоящих в списке мест совпадает и при этом между ними есть 2 свободных места if a[i][0] == a[i + 1][0] and a[i][1]+3 == a[i+1][1]: row = a[i][0] # вычисляем ряд place = a[i][1] + 1 # вычисляем минимальное свободное место print(row,place) break
Ошибка.
Попробуйте повторить позже
В лесничестве саженцы сосны высадили параллельными рядами, которые пронумерованы идущими подряд натуральными числами. Растения в каждом ряду пронумерованы натуральными числами начиная с единицы. По данным аэрофотосъёмки известно, в каких рядах и на каких местах растения не прижились. Найдите ряд с наибольшим номером, в котором есть ровно 11 идущих подряд свободных мест для посадки новых сосен, таких, что непосредственно слева и справа от них в том же ряду растут сосны. Гарантируется, что есть хотя бы один ряд, удовлетворяющий этому условию. В ответе запишите два целых числа через пробел: наибольший номер ряда и наименьший номер места для посадки из числа найденных в этом ряду подходящих последовательностей из 11 свободных мест.
Входные данные. В первой строке входного файла находится число N – количество прижившихся саженцев сосны (натуральное число, не превышающее 20 000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 100 000: номер ряда и номер места в этом ряду, на котором растёт деревце.
Выходные данные. Два целых неотрицательных числа через пробел: наибольший номер ряда и наименьший номер места в выбранной последовательности из 11 мест, подходящих для посадки новых сосен.
Решение (Excel/LibreOffice)
Открываем программу Excel и загружаем в неё наш файл. Сортируем данные столбца А и В по возрастанию.
В ячейку впишем формулу: ЕСЛИ(И и растянем её вниз. Далее выберем с помощью фильтра про столбцу С те строки, в которых значения равны 1. Наибольший номер ряда будет находится в самом низу таблицы и равен 59966. Наибольший номер в выбранной последовательности будет отличаться на 1 от номера места для ряда найденного 59966, то есть 81345.
Решение (Python)
f = open(’264__1vi92.txt’) n = int(f.readline()) a = [] # список координат прижившихся саженцев for i in range(n): x, y = [int(_) for _ in f.readline().split()] # считывание текущей строки a.append([x, y]) a.sort() ans = [0, 0] for i in range(n-1): # проход по всем координатам саженцев # если ряд двух рядом стоящих в списке саженцев совпадает и при этом между ними есть 11 свободных мест if a[i][0] == a[i + 1][0] and a[i][1]+12 == a[i+1][1]: row = a[i][0] # вычисляем ряд place = a[i][1] + 1 # вычисляем минимальное свободное место if row > ans[0]: ans[0] = row ans[1] = place print(*ans)
Ошибка.
Попробуйте повторить позже
На прямолинейном участке пути для обеспечения связи необходимо разместить радиопередатчики. Установка каждого такого передатчика возможна на любом из N объектов, включённом в перечень разрешённых. Известно расстояние от нулевой отметки на этом участке до каждого объекта из данного перечня, кроме того по технических нормативам для работы без помех два соседних передатчика должны находиться на расстоянии не менее 15 единиц друг от друга. На данном участке пути необходимо разместить максимальное количество передатчиков, не нарушая технические нормативы. Определите количество передатчиков при таком размещении и максимально возможное расстояние от нулевой отметки до ближайшего к ней передатчика.
Входные данные. В первой строке входного файла находится число N (натуральное число, не превышающее 10 000) - количество объектов, на которых можно устанавливать передатчики. В следующих N строках находятся значения расстояний от нулевой отметки до каждого из этих объектов.
Запишите в ответе два целых числа через пробел: сначала максимальное количество передатчиков, которое можно разместить на данном участке пути, не нарушая технические нормативы, затем максимально возможное расстояние от нулевой отметки до ближайшего к ней передатчика при таком размещении.
Открываем программу Excel и загружаем в неё наш файл. Сортируем данные столбца А по убыванию.
В ячейку копируем данные из ячейки . В ячейку вписываем формулу: ЕСЛИ() и протягиваем её вниз.
В ячейку копируем данные из ячейки . В ячейку вписываем формулу: ЕСЛИ(; ’ ’) и растягиваем её вниз.
Осталось посчитать количество передатчиков и найти расстояние. Для подсчёта количества в ячейку впишем формулу: СЧЁТ, результат получается равный 198. В соседнюю ячейку впишем формулу: МИН, её результат и будет являться максимальным возможным расстоянием.
Ошибка.
Попробуйте повторить позже
При проведении эксперимента заряженные частицы попадают на чувствительный экран, представляющий из себя матрицу размером 100 000 на 100 000 точек. При попадании очередной частицы на экран в файл записываются координаты чувствительного элемента: номер строки (целое число от 1 до 100 000) и номер позиции в строке (целое число от 1 до 100 000). Точка экрана, в которую попала хотя бы одна частица, считается светлой, точка, в которую ни одна частица не попала, – тёмной.
Вам нужно определить наибольшую длину цепочки в одной строке, в которой светлые точки идут подряд. Если таких строк несколько, укажите номер первой из подходящих строк.
Входные данные представлены в файле следующим образом. В первой строке входного файла записано целое число N – количество частиц, попавших на экран. В каждой из следующих N строк записаны по два числа, разделённые пробелом: номер строки и номер позиции в строке.
Запишите в ответе два числа через пробел: сначала номер строки, в которой находится эта цепочка (если таких строк несколько, запишите минимальный из их номеров), затем количество светлых точек в самой длинной цепочке из светлых точек.
Решение (Excel/LibreOffice)
Открываем программу Excel и загружаем в неё наш файл. Выделяем оба столбца - А и В, переходим в раздел "Данные"и выбираем функцию "Удалить дубликаты". Теперь сортируем данные столбца А и В по возрастанию.
В ячейку помещаем число 1, в ячейку вписываем формулу: ЕСЛИИ. Накладываем фильтр на столбец С и выбираем самое большое значение - 10. Это и будет являться максимальной длиной цепочки. Так как для значения 10 у нас нашлась одна строка, то она и будет искомой.
Решение (Python)
f = open(’267__1vi96.txt’) n = int(f.readline()) maxim = 0 row = 0 max_row = 0 # максимальный ряд в файле max_seat = 0 # максимальное место в ряду в файле for i in range(n): x, y = [int(s) for s in f.readline().split()] # считывание текущей строки max_row = max(max_row,x) # вычисляем максимальный ряд max_seat = max(max_seat,y) # вычисляем максимальное место f.close() f = open(’267__1vi96.txt’) n = int(f.readline()) a = [[0 for i in range(max_seat+1)] for j in range(max_row+1)] # матрица свободных и занятых мест for i in range(n): x, y = [int(s) for s in f.readline().split()] # считывание текущей строки a[x][y] = 1 # отмечаем, что данный пиксель занят for i in range(max_row): counter = 0 # счетчик подряд идущих занятых пикселей for j in range(max_seat): if a[i][j] == 1: counter += 1 else: counter = 0 if counter > maxim: # если счётчик больше максимума maxim = counter # перезаписываем максимум row = i # записываем ряд print(row,maxim)
Ошибка.
Попробуйте повторить позже
В городе планируется музыкальный фестиваль, на который открыт предзаказ билетов. Каждая заявка на предзаказ содержит только одно целое число - количество билетов, которые человек хочет купить.
Перед началом фестиваля кассир распределяет заявки следующим образом: в первую очередь рассматриваются заявки, содержащие наибольшее количество билетов для покупки. Все билеты из одной заявки должны находится в одном ряду. А также, в первую очередь заполняется ряд с наименьшим номером.
Определите, какое количество заявок подтвердит кассир и сколько свободных мест останется после распределения всех заявок.
Входные данные. В первой строке находится три числа: A - количество рядов, B - количество мест в ряду и C - количество заявок. В каждом из С следующих строк находится одно число - количество билетов в заявке.
Выходные данные. Два числа через пробел - сначала количество подтвержденных заявок, затем количество оставшихся мест.
Решение (Python)
with open(’26_2__1vv2z.txt’) as f: # k - количество рядов # m - количество мест в ряду # n - количество заявок k, m, n = map(int, f.readline().split()) # Список заявок s = [int(f.readline())for _ in range(n)] # Сортируем список так, чтобы в начале стояли наибольшие числа s.sort(reverse=True) # Список для обозначения свободных мест free = [m]*k # Количество подтверждённых заявок cnt = 0 # Проходимся по заявкам for x in s: # Проходимся по каждому ряду for i in range(k): # Если в ряду достаточно свободных мест для заявки — засчитываем if free[i] >= x: # Отнимаем кол-во занимаемых мест от кол-ва свободных мест в этом ряду free[i] -= x cnt += 1 break # сбрасываем цикл - переходим к следующей заявке print(cnt, sum(free))
Ошибка.
Попробуйте повторить позже
В лесополосе осуществляется посадка деревьев. Причем саженцы высаживают рядами на одинаковом расстоянии.
Через какое-то время осуществляется аэросъемка, в результате которой определяется, какие саженцы прижились. Необходимо определить ряд с максимальным номером, в котором есть подряд ровно неприжившихся саженцев, при условии, что справа и слева от них саженцы прижились. При аэросъемке была совершена ошибка — одно и то же дерево могло быть снято дважды. В ответе запишите сначала наибольший номер ряда, затем наименьший номер из найденных неприжившихся мест в этом ряду.
Входные данные:
В первой строке входного файла находится число — количество занятых мест (натуральное число, не превышающее ). Каждая из следующих строк содержит два натуральных числа, не превышающих : номер ряда и номер занятого места.
Выходные данные:
Два целых неотрицательных числа: максимальный номер ряда, где нашлись обозначенные в задаче места, и минимальный номер подходящего места.
Решение (Excel/LibreOffice)
Сначала перенесем данные из файла в Excel, скопировав и вставив с разделителем пробел, а также удалим первую строчку.
Настраиваемой сортировкой отсортируем в первую очередь по столбцу по возрастанию, во вторую - по столбцу по возрастанию.
Выделим полностью столбцы и , перейдём в раздел Данные и нажимаем на инструмент Удалить дубликаты, в появившемся окне выбираем Выделить все и нажимаем ОК (это удалит деревья, которые были по ошибке сняты дважды).
В LibreOffice Calc необходимо также выделить оба столбца, применить фильтр и перейти в раздел Фильтр по условию -> Стандартный фильтр.
В условиях фильтра необходимо через И выбрать столбцы и , установить значение Не пусто и поставить галочку напротив Без повторений. После чего нужно скопировать отфильтрованные значения на новый лист и работать уже там.
Чтобы определить, пропущены ли ровно 13 саженцев среди прижившихся, в ячейку запишем формулу и растянем её до конца таблицы:
=ЕСЛИ(И(A2=A1;B2-B1=14);B1+1;0)
Условие обеспечивает попадание двух прижившихся саженцов в один ряд, - равенство количества неприжившихся саженцев между прижившимися 13-и. Если условия выполнились - записываем в ячейку номер первого неприжившегося саженца из 13-и.
Отфильтруем данные по столбцу , убрав все нули, и получим места, для которых выполнилось условие. Значения из столбцов и последней строчки запишем в ответ.
Решение (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)
Ошибка.
Попробуйте повторить позже
Организация купила для своих сотрудников все места в нескольких подряд идущих рядах на концертной площадке. Известно, какие места уже распределены между сотрудниками. Найдите ряд с наибольшим номером, в котором есть три занятых места, попарно разделенных свободным (занято-свободно-занято-свободно-занято), таких что слева и справа от них в том же ряду места свободны (не заняты). Гарантируется, что есть хотя бы один ряд, удовлетворяющий условию.
Входные данные:
В первой строке входного файла находится одно число: — количество занятых мест (натуральное число, не превышающее ). В следующих строках находятся пары чисел: ряд и место выкупленного билета, не превышающие .
В ответе запишите два целых числа: наибольший номер ряда и наибольший номер центрального места из найденных трёх занятых.
Решение (Excel/LibreOffice)
Сначала перенесем данные из файла в Excel, скопировав и вставив с разделителем пробел, а также удалим первую строчку.
Настраиваемой сортировкой отсортируем в первую очередь по столбцу по возрастанию, во вторую - по столбцу по возрастанию.
Выделим полностью столбцы и , перейдём в раздел Данные и нажимаем на инструмент Удалить дубликаты, в появившемся окне выбираем Выделить все и нажимаем ОК (это удалит деревья, которые были по ошибке сняты дважды).
В LibreOffice Calc необходимо также выделить оба столбца, применить фильтр и перейти в раздел Фильтр по условию -> Стандартный фильтр.
В условиях фильтра необходимо через И выбрать столбцы и , установить значение Не пусто и поставить галочку напротив Без повторений. После чего нужно скопировать отфильтрованные значения на новый лист и работать уже там.
Чтобы определить тройку мест в необходимом нам порядке, запишем в ячейку и растянем до конца таблицы следующую формулу:
=ЕСЛИ(И(A1=A2;A2=A3;B2-B1=2;B3-B2=2);B2;0)
Условия и обеспечивает попадание трех мест в один ряд, и - свободные места в нужных промежутках.
Отфильтруем данные по столбцу , убрав все нули, и получим места, для которых выполнилось условие. Значения из столбцов и последней строчки запишем в ответ.
Решение (Python)
f = open(’m5_26_18_04__3u8xl.txt’) n = int(f.readline()) old_tr = [list(map(int, i.split())) for i in f] old_tr.sort() tr = [] # список, в котором будут только уникальные координаты for i in old_tr: if not(i in tr): tr.append(i) max_row = 0 place = 0 for i in range(len(tr) - 2): # проверка, что у трёх рядом стоящих в списке мест совпадает ряд if tr[i][0] == tr[i + 1][0] == tr[i + 2][0]: # проверка, что между двумя подряд идущими местами есть одно место свободное if tr[i + 1][1] - tr[i][1] == tr[i + 2][1] - tr[i + 1][1] == 2: max_row = tr[i][0] place = tr[i + 1][1] print(max_row, place)