ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Обработка текстового файла.
| КЭС: | 3.9 Обработка символьных данных. Встроенные функции языка программирования для обработки символьных строк. Алгоритмы обработки символьных строк: подсчёт количества появлений символа в строке, разбиение строки на слова по пробельным символам, поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Генерация всех слов в некотором алфавите, удовлетворяющих заданным ограничениям. Преобразование числа в символьную строку и обратно |
| Тип ответа: | Краткий ответ |
Ответ: 132
Решение.
Любая подходящая последовательность начинается в позиции буквы N и заканчивается раньше следующей N. Поэтому при каждой новой N прежнее начало больше использовать нельзя: устанавливаем новое начало и обнуляем счётчик цифр. До первой N подходящей последовательности нет.
Двигаем правую границу по одному символу. Цифры распознаём по диапазону от «0» до «9»; все остальные разрешённые символы — заглавные латинские буквы. Пока цифр меньше 55, условие ещё не выполнено. Когда их ровно 55, текущая длина подходит; следующие буквы могут увеличить её. После 56-й цифры ни одна более длинная последовательность с этим началом уже не подойдёт. Ожидаем следующую N.
Для каждого допустимого начала проверены все правые границы до следующей N. Каждая последовательность, удовлетворяющая условию, входит в этот просмотр, поэтому наибольшая сохранённая длина является глобальным максимумом.
Проверка. Контрольный фрагмент занимает позиции 3243577–3243708 включительно, считая с 1. Он начинается с N, не содержит других N и содержит ровно 55 цифр. Его длина равна 3243708 − 3243577 + 1 = 132. Счётчик включает все символы фрагмента, а не только цифры.
Программа Python; переименуем извлечённый текстовый файл в data.txt либо укажем его исходное имя в open:
with open("data.txt", encoding="utf-8-sig") as f:
s = f.read().strip()
start = -1
digits = 0
best = 0
for i, ch in enumerate(s):
if ch == "N":
start = i
digits = 0
elif start >= 0:
if "0" <= ch <= "9":
digits += 1
if digits == 55:
best = max(best, i - start + 1)
print(best)Программа проходит по строке за линейное время. Дополнительные счётчики не растут с длиной файла. Независимый алгоритм по позициям символов и вхождений подтвердил максимум.
Ответ: 132.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINFC6FBAB.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.