ALEXMATH

Информатика. ЕГЭ

Задания для подготовки

Задачи разных лет из реальных экзаменов, демо-вариантов, сборников задач и других источников

Перейти к заданиям

Задание 26. Информатика. 2022-1

Просмотры: 647
Изменено: 28 января 2025

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

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

Выходные данные
Два целых неотрицательных числа: номер ряда и наименьший номер пикселя в выбранной паре.
Пример входного файла:
\(7\)
\(20 \,\, 10\)
\(20 \,\, 13\)
\(30 \,\, 45\)
\(40 \,\, 17\)
\(40 \,\, 20\)
\(40 \,\, 30\)
\(40 \,\, 33\)

Условию задачи удовлетворяют три пары чисел: \(20\) и \(11\), \(40\) и \(18\), \(40\) и \(31\). Ответ для приведённого примера:

\(40\)    \(18\)

Файл с данными

Решение:

Python


f = open('input26_01.txt')
length = int(f.readline())

pixels = [tuple(map(int, s.split())) for s in f.readlines()]
pixels.sort(reverse=True)
curr_row = pixels[0][0] # Текущая строка
curr_pix = [pixels[0][1], ] # Список пикселов в строке curr_row
fl = False
for i in range(1, length):
    if pixels[i][0] == curr_row: 
        curr_pix.append(pixels[i][1]) # Собираем все пикселы в строке curr_row
    else:  # Все пикселы собраны. Обрабатываем их и устанавливаем новый curr_row
        curr_pix.sort() # Сортируем. Нужно вывести наименьший пиксел
        len_pix = len(curr_pix)
        if len_pix > 1: # Если собранных пикселов больше 1
            for k in range(1, len_pix): 
                if curr_pix[k] - curr_pix[k-1] == 3: # Здесь может поместиться два белых символа
                    print(curr_row, curr_pix[k-1] + 1) # Мы их нашли. Выводим на экран
                    fl = True # Флаг сбрасываем в True. Нужно прервать внешний цикл
                    break # Прерывыаем внутренний for
        if fl: # Если нашли нужные пикселы, прерываем внешний for
            break
                                    # Сюда попадаем, если нужных пикселов не нашли.
        curr_row = pixels[i][0]     # Устанавливаем указатель на новую строку и формируем 
        curr_pix = [pixels[i][1], ] # новый список пикселов для новой строки curr_row

Ответ: 67890    98765

Обсуждение задания

Здесь пока нет ни одного комментария. Будьте первым!

kege1
kege2
kege3
Новый тренажёр-эмулятор
Станции КЕГЭ

Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене.

Новое видео

Методы решения задания 16 ЕГЭ по Информатике «Вычисление рекуррентных выражений»

Поддержать автора сайта!

Поддержите автора сайта, если материалы, размещённые здесь, оказались вам полезны.

Совершая донат, вы соглашаетесь с Условиями использования

Расписание пробников Статграда в 2026/27 учебном году