ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Обработка текстового файла.
| КЭС: | 3.9 Обработка символьных данных. Встроенные функции языка программирования для обработки символьных строк. Алгоритмы обработки символьных строк: подсчёт количества появлений символа в строке, разбиение строки на слова по пробельным символам, поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Генерация всех слов в некотором алфавите, удовлетворяющих заданным ограничениям. Преобразование числа в символьную строку и обратно |
| Тип ответа: | Краткий ответ |
Ответ: 17
В подходящем фрагменте чередуются два класса: буквы Q, R, W и цифры 1, 2, 4. Пары QW и 12 запрещены, хотя в каждой из них символы различны. Пары Q1 и 4R разрешены. Если проверки принадлежности классу букв у двух соседей дают равные логические значения, перед нами запрещённая пара: две буквы или две цифры.
Пусть current — длина самого длинного допустимого фрагмента, заканчивающегося на текущем символе. Для первого символа она равна 1. Если новая соседняя пара разрешена, прежний фрагмент продлевается: current увеличивается на 1. Если пара запрещена, начинаем с текущего символа заново: current = 1.
После каждого символа обновляем общий максимум best. Обязательно делаем это и на последнем символе: иначе можно потерять самую длинную серию в конце файла. Перевод строки не относится к алфавиту задачи, поэтому убираем его с помощью strip.
Сохраните скачанный файл под именем 1_24.txt рядом с программой. Полная программа на Python 3:
s = open('1_24.txt', encoding='utf-8').read().strip()
current = 0
best = 0
for i in range(len(s)):
if i == 0:
current = 1
else:
forbidden = (s[i - 1] in 'QRW') == (s[i] in 'QRW')
if forbidden:
current = 1
else:
current += 1
best = max(best, current)
print(best)Программа выводит 17. Для вычисления достаточно одного прохода по строке.
Проверка корректности. В уже найденном фрагменте все соседние пары допустимы. После добавления символа нужно проверить только новую последнюю пару. Если она запрещена, любой более длинный фрагмент с тем же концом содержит её и тоже запрещён. Следовательно, правило обновления находит максимальную длину для каждого возможного конца.
Независимая проверка состоит в разрезании исходной строки по всем запрещённым соседним парам. Каждая полученная часть допустима, а любой допустимый фрагмент целиком лежит в одной из частей. Поэтому максимум их длин должен совпасть с результатом программы.
| Характеристика | Значение |
|---|---|
| Символов в файле | 10000000 |
| Частей между запрещёнными границами | 6800802 |
| Максимальная длина | 17 |
Максимальный фрагмент расположен на позициях 2961667–2961683, если считать с 1. Его длина 2961683 − 2961667 + 1 = 17.
Сам фрагмент: 4W2W2R2R4Q4Q4Q2R2.
На левой границе стоят символы 14, на правой — 24. Обе пары запрещены, поэтому фрагмент нельзя продлить. Сравнение всех частей подтверждает, что более длинных нет.
Ответ: 17.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINFE74424.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.