Задание EGEINF29B59D: Обработка текстового файла

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Обработка текстового файла.

Учебные темы: Обработка символьных данных. Встроенные функции языка программирования для обработки символьных строк. Алгоритмы обработки символьных строк: подсчёт количества появлений символа в строке, разбиение строки на слова по пробельным символам, поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Генерация всех слов в некотором алфавите, удовлетворяющих заданным ограничениям. Преобразование числа в символьную строку и обратно.

Впишите правильный ответ.

 Рисунок из условия ФИПИЗадание выполняется с использованием прилагаемых файлов.

 

 

Текстовый файл состоит из символов A, B и C. 

Определите максимальное количество идущих подряд пар символов AB или CB в прилагаемом файле.

Искомая подпоследовательность должна состоять только из пар AB, или только из пар CB, или только из пар AB и CB
в произвольном порядке следования этих пар.

Для выполнения этого задания следует написать программу.

Скачать файл задания (TXT, ФИПИ)


i
СВОЙСТВА ЗАДАНИЯ
КЭС:
2.13 Графы. Основные понятия. Виды графов. Описание графов с помощью матриц смежности, весовых матриц, списков смежности. Решение алгоритмических задач, связанных с анализом графов (построение оптимального пути между вершинами графа, определение количества различных путей между вершинами ориентированного ациклического графа)
2.14 Деревья. Бинарное дерево. Деревья поиска. Способы обхода дерева. Представление арифметических выражений в виде дерева. Использование графов и деревьев при описании объектов и процессов окружающего мира
3.2 Оценка сложности вычислений. Время работы и объём используемой памяти, их зависимость от размера исходных данных. Оценка асимптотической сложности алгоритмов. Алгоритмы полиномиальной сложности. Переборные алгоритмы. Примеры различных алгоритмов решения одной задачи, которые имеют различную сложность
3.3 Определение возможных результатов работы простейших алгоритмов управления исполнителями и вычислительных алгоритмов. Определение исходных данных, при которых алгоритм может дать требуемый результат
3.10 Массивы и последовательности чисел. Вычисление обобщённых характеристик элементов массива или числовой последовательности (суммы, произведения, среднего арифметического, минимального и максимального элементов, количества элементов, удовлетворяющих заданному условию). Линейный поиск заданного значения в массиве. Алгоритмы работы с элементами массива с однократным просмотром массива. Сортировка одномерного массива. Простые методы сортировки (метод пузырька, метод выбора, сортировка вставками). Сортировка слиянием. Быстрая сортировка массива (алгоритм QuickSort). Двоичный поиск в отсортированном массиве
3.11 Двумерные массивы (матрицы). Алгоритмы обработки двумерных массивов: заполнение двумерного числового массива по заданным правилам, поиск элемента в двумерном массиве, вычисление максимума (минимума) и суммы элементов двумерного массива, перестановка строк и столбцов двумерного массива
3.12 Словари (ассоциативные массивы, отображения). Хэш-таблицы. Построение алфавитно-частотного словаря для заданного текста
3.13 Стеки. Анализ правильности скобочного выражения. Вычисление арифметического выражения, записанного в постфиксной форме. Очереди. Использование очереди для временного хранения данных
3.14 Алгоритмы на графах. Построение минимального остовного дерева взвешенного связного неориентированного графа. Количество различных путей между вершинами ориентированного ациклического графа. Алгоритм Дейкстры
3.15 Деревья. Реализация дерева с помощью ссылочных структур. Двоичные (бинарные) деревья. Построение дерева для заданного арифметического выражения. Рекурсивные алгоритмы обхода дерева. Использование стека и очереди для обхода дерева
Тип ответа:Краткий ответ
Номер: 29B59D
НЕ РЕШЕНО Ответить

Решение задания EGEINF29B59D

Ответ: 65

Решение.
Искомый фрагмент состоит из последовательных неперекрывающихся пар AB и CB. Каждая пара содержит два символа, но в ответе требуется количество пар, а не длина строки в символах.
Просматриваем файл слева направо. Если два символа с текущей позиции образуют AB или CB, увеличиваем длину текущей цепочки на одну пару, обновляем максимум и сдвигаемся на два символа. Иначе цепочка закончилась: сбрасываем её длину и сдвигаемся только на один символ, чтобы проверить возможное начало следующей цепочки.
Пропуск второго символа найденной пары безопасен: это всегда B, а допустимая пара начинается только с A или C. Значит, внутри найденной пары новое подходящее начало находиться не может. При несовпадении сдвиг на один символ сохраняет все остальные возможные начала. Таким образом, алгоритм проверяет каждую максимальную цепочку.
Обновляем максимум сразу после каждой найденной пары: это учитывает и цепочку, которая заканчивается в самом конце файла. Например, для ABCBAB результат равен 3, для BBB — 0, а для CB — 1.
Программа на Python 3. Сохраняем скачанный файл как 107_24.txt рядом с программой:

with open('107_24.txt', encoding='utf-8-sig') as source:
    text = source.read().strip()
current = 0
best = 0
position = 0
while position + 1 < len(text):
    if text[position:position + 2] in ('AB', 'CB'):
        current += 1
        best = max(best, current)
        position += 2
    else:
        current = 0
        position += 1
print(best)

Проверка результата. Программа выводит 65. В исходной строке 4856633 символа; найденный максимальный фрагмент имеет длину 130 символов, то есть 65 пар. Независимый поиск всех фрагментов вида «одна или несколько пар AB либо CB» даёт тот же максимум.

ВеличинаЗначение
Количество пар в максимальном фрагменте65
Длина этого фрагмента в символах130
Первая позиция фрагмента, считая с единицы1277720
Последняя позиция фрагмента, считая с единицы1277849

Время работы O(L), где L — длина строки. Считывание файла целиком требует O(L) памяти; для самого прохода используются только несколько счётчиков.
Ответ: 65.

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF29B59D.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.