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

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

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

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

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

Задача понятна: дано число K > 1 и строка S, состоящая из латинских букв. Нужно привести каждую максимальную последовательность одинаковых символов к длине не более K, сохранив порядок символов и не удаляя полностью последовательности.

Пошаговое объяснение и решение

  1. Идея
  • Проходим по строке слева направо и считаем длину текущей последовательности одинаковых символов.
  • Когда встречаем новый символ, дописываем в результат ту же букву повторённую min(длина последовательности, K) раз.
  • После конца строки дописываем остаток текущей последовательности тем же способом.
  1. Алгоритм
  • Инициализируем текущий символ cur = S[0] и счётчик cnt = 1.
  • По остальным символам прохода:
    • Если следующий символ равен cur, увеличиваем cnt.
    • Иначе дописываем в результат cur * min(cnt, K), меняем cur на новый символ и cnt = 1.
  • В конце дописываем последнюю группу как cur * min(cnt, K).
  • Соединяем все части в одну строку и выводим.
  1. Сложность
  • Временная: O(n), где n — длина S.
  • Память: O(n) на результирующую строку.
  1. Пример
  • Вход: K = 2, S = "uraaaaSuperrr"
  • Группы: 'u'(1), 'r'(1), 'a'(4), 'S'(1), 'u'(1), 'p'(1), 'e'(1), 'r'(3)
  • Приводим к: 'u'(1), 'r'(1), 'a'(2), 'S'(1), 'u'(1), 'p'(1), 'e'(1), 'r'(2)
  • Вывод: "uraaSuperr" (как в примере).
  1. Реализация на Python

def normalize_runs(S, K): if not S: return "" res = [] cur = S[0] cnt = 1 for ch in S[1:]: if ch == cur: cnt += 1 else: res.append(cur * min(cnt, K)) cur = ch cnt = 1 res.append(cur * min(cnt, K)) 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(S, K))

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

  • Ввод: 2 uraaaaSuperrr
  • Вывод: uraaSuperr

Если нужны другие языки программирования, могу привести аналогичную реализацию на C++, Java или другом языке.