Задача к ЕГЭ по информатике на тему «Поиск мест на поле (билеты, саженцы, матрицы)» №3

При проведении эксперимента заряженные частицы попадают на чувствительный экран, представляющий из себя матрицу размером 10000  на 10000  точек. При попадании каждой частицы на экран в протоколе фиксируются координаты попадания: номер ряда (целое число от 1  до 10000  ) и номер позиции в ряду (целое число от 1  до 10000  ). Точка экрана, в которую попала хотя бы одна частица, считается светлой, точка, в которую ни одна частица не попала — тёмной. При анализе результатов эксперимента рассматривают группы светлых точек, расположенных в одном ряду подряд, то есть без тёмных точек между ними. Вам необходимо по заданному протоколу определить максимальную длину такой группы и номер ряда, в котором эта группа встречается. Если таких рядов несколько, укажите минимально возможный номер.

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

Первая строка входного файла содержит целое число N  — общее количество частиц, попавших на экран. Каждая из следующих N  строк содержит 2  целых числа: номер ряда и номер позиции в ряду.

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

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

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

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

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

PIC

PIC

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

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

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

PIC

PIC

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

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

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

Решение (Python)

f = open(’m6_26_18_04__3u8y8.txt’)
n = map(int, f.readline().split())
# Сортировка по ряду и номеру пикселя
a = sorted([list(map(int, i.split())) for i in f])
l_max = 0; l = 1; num_r = -1
for i in range(1, len(a)-1):
    # Если номер ряда совпадает и пиксели соседние увеличиваем счетчик
    if (a[i][0] == a[i+1][0]) and (a[i+1][1]-a[i][1] == 1):
        l += 1
    # Если нет, то обновляем максимум и обнуляем счетчик
    else:
        if l > l_max:
            l_max = l
            num_r = a[i][0]
        l = 1
if l > l_max:
    l_max = l
    num_r = a[-1][0]
print(l_max, num_r)

Ответ: 13 2513
Оцените статью
Я решу все!