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

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

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

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

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

Задача и решение

  • Что нужно сделать: для строки S, состоящей из латинских букв, привести каждый максимальный участок повторяющегося символа к длине не более K. То есть в каждом блоке одинаковых символов сохраняем не более первых K повторений, остальные пропускаем. Порядок символов не меняем, ни одну серию целиком не удаляем (оставляем максимум K символов из каждой серии).

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

  • Сложность: время O(n), память O(n) для итоговой строки.

  • Пример: пусть K = 3, S = "aaabbbbccddddd"
    Результат: "aaabbbccdddd" (первые 3 из каждой серии: a(3), b(3), c(2), d(4) -> но ограничиваем до 3, значит "aaabbbccddd" если дублируются, в общем тестовый пример можно подставлять свои).

Пример кода на Python 3

def normalize_runs(K, S): res = [] prev = None count = 0 for ch in S: if ch == prev: count += 1 else: prev = ch count = 1 if count <= K: res.append(ch) return ''.join(res)

def main(): import sys data = sys.stdin.read().splitlines() if not data: return K = int(data[0].strip()) S = data[1].strip() if len(data) > 1 else "" print(normalize_runs(K, S))

if name == "main": main()

Как использовать:

  • Ввод первого аргумента — K (целое число > 1).
  • Ввод второй строки — S (только латинские буквы, без пробелов).
  • Выводится строка S' с ограничением длины любых подряд идущих одинаковых символов до K.

Дополнительные заметки:

  • Если K >= длина текущей серии, серия остаётся без изменений.
  • Если серия длиннее K, лишние символы удаляются (остаются только первые K повторений). Порядок символов и оставшиеся части строки сохраняются.