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

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

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

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

Запишите в ответе два числа через пробел: сначала номер строки, в которой находится эта цепочка (если таких строк несколько, запишите минимальный из их номеров), затем количество светлых точек в самой длинной цепочке из светлых точек.

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

Открываем программу Excel и загружаем в неё наш файл. Выделяем оба столбца — А и В, переходим в раздел «Данные»и выбираем функцию «Удалить дубликаты». Теперь сортируем данные столбца А и В по возрастанию.

В ячейку C1  помещаем число 1, в ячейку C2  вписываем формулу: =  ЕСЛИ(  И(A2 = A1; B2 = B1 +1);C1 + 1;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)

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