Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3481271
А
Аноним
23 октября 2025 15:15 · публичный вопрос
А
Аноним

Вы разрабатываете препроцессор текста для языковой модели. Пользователи иногда тянут буквы, например: coooool, yaaaау. Перед обучением модели и при обработке пользовательских…

Запрос пользователя

Вы разрабатываете препроцессор текста для языковой модели. Пользователи иногда тянут буквы, например: coooool, yaaaау. Перед обучением модели и при обработке пользовательских сообщений такие повторения нужно нормализовать: каждая подряд идущая серия одинаковых символов должна иметь длину не больше К. По заданным К и строке 5 (состоящей из латинских букв) получите строку 5, в которой длина каждой максимальной серии одинаковых символов не превосходит К. Не меняйте порядок символов и не удаляйте серии полностью. Формат входных данных Первая строка содержит натуральное число К > 1. Вторая строка содержит строку из латинских букв (А..Z, a..z). Формат выходных данных Выведите исправленную строку.

Ответ нейросети
23 октября 2025 15:15

Задача ясна: получить строку, в которой для каждой максимальной серии подряд идущих одинаковых символов длина не превышает заданное число K. Порядок символов не меняем, полностью удалять серии не надо — если серия длинная, обрезаем её до длины K.

Пошаговый алгоритм

  • Ввод: первую строку читаем как целое число K (> 1), вторую — строку s из латинских букв.
  • Идем по строке слева направо, выделяем каждую максимальную серию одинаковых символов:
    • фиксируем текущий символ ch и находим границу серии до тех пор, пока встречаются такие же символы.
    • вычисляем длину серии run_len.
    • в выходную строку добавляем min(run_len, K) копий символа ch.
  • Переходим к следующей серии и повторяем.
  • По завершении печатаем полученную строку.

Ключевые моменты

  • Сложность: линейная по длине входной строки, O(n) время и O(n) память на выход.
  • Различие между буквами: регистр имеет значение, то есть 'A' и 'a' считаются разными символами.
  • Параметр K > 1, как указано в условии, но код корректно работает и при других значениях (если вдруг встретится).

Пример

  • Ввод: K = 3, s = "coooool"
  • Разбор: 'c' (длина 1) -> "c"; серия 'o' (длина 5) -> оставляем 3 'o' -> "...ooo..."; 'l' (длина 1) -> "l"
  • Вывод: "coool"

Python-реализация (быстрый готовый вариант) def normalize_runs(K, s): if not s: return "" res = [] i = 0 n = len(s) while i < n: ch = s[i] j = i + 1 while j < n and s[j] == ch: j += 1 run_len = j - i res.append(ch * min(run_len, K)) i = j return "".join(res)

Пример использования

print(normalize_runs(3, "coooool")) # вывод: coool

Если хотите, могу привести тесты на другие примеры или адаптировать решение под конкретный язык программирования.