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

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

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

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

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

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

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

 

Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита. Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых подстрока 2025 встречается не менее 90 раз и при этом содержится ровно 80 букв Y.

В ответе запишите число – количество символов в найденной последовательности.

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

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


i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.9 Обработка символьных данных. Встроенные функции языка программирования для обработки символьных строк. Алгоритмы обработки символьных строк: подсчёт количества появлений символа в строке, разбиение строки на слова по пробельным символам, поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Генерация всех слов в некотором алфавите, удовлетворяющих заданным ограничениям. Преобразование числа в символьную строку и обратно
Тип ответа:Краткий ответ
Номер: D6DFE2
НЕ РЕШЕНО Ответить

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

Ответ: 2981

Решение.
В файле DEMO24.txt нужно найти самый длинный непрерывный фрагмент с ровно 80 буквами Y и не менее чем 90 вхождениями сочетания 2025. Обе проверки обязательны.
Разделим исходную строку по буквам Y. Получатся участки, внутри которых Y отсутствует. Пустые участки между соседними Y, а также пустые участки на краях сохраняем: они нужны для правильного подсчёта.
Любой максимальный фрагмент с заданными 80 последовательными Y состоит из 81 полного участка и 80 разделителей Y между ними. Его можно расширять внутри крайних участков до ближайшей внешней Y или края файла. Такое расширение не меняет число Y и не уменьшает количество 2025, поэтому искать более короткие части этих участков не требуется.
Для каждого участка запишем длину и количество 2025. Сочетание 2025 не может пересечь разделитель Y, поэтому число его вхождений в объединении равно сумме количеств в отдельных участках. У самого сочетания 2025 нет перекрывающихся вхождений: его собственные непустые начало и конец не совпадают. Поэтому метод count подходит.
Переберём окна из 81 соседнего участка. Длина окна равна сумме их длин плюс 80. Проверяем сумму количеств 2025; если она не меньше 90, обновляем максимум. При сдвиге окна вычитаем показатели ушедшего участка и прибавляем показатели нового.
Программа на Python 3:

Перед запуском сохраните скачанный файл под именем DEMO24.txt рядом с программой.

with open('DEMO_24.txt') as source:
    parts = source.read().strip().split('Y')
lengths = [len(part) for part in parts]
patterns = [part.count('2025') for part in parts]
width = 81
best = 0
if len(parts) >= width:
    total_length = sum(lengths[:width]) + 80
    total_patterns = sum(patterns[:width])
    for start in range(len(parts) - width + 1):
        if start > 0:
            old, new = start - 1, start + width - 1
            total_length += lengths[new] - lengths[old]
            total_patterns += patterns[new] - patterns[old]
        if total_patterns >= 90:
            best = max(best, total_length)
print(best)

Результат — 2981. Проверка: один максимальный фрагмент занимает позиции 1763444–1766424 включительно, считая с единицы. Он содержит ровно 80 букв Y и 656 вхождений 2025, что не меньше 90. Его длина 1766424 − 1763444 + 1 = 2981.
Независимый посимвольный проход с движущимися границами подтвердил тот же максимум и те же границы. В проверку входят участки до первой и после последней Y: пропуск начального участка может потерять вхождения 2025. Обработка занимает O(L) времени и O(L) памяти, где L — длина файла.
Ответ: 2981.

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

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

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

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

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

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

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