Пожалуйста, прочтите новое правило об ограничении использования AI-инструментов. ×

Блог пользователя furious

Автор furious, 12 лет назад, По-русски
  • Проголосовать: нравится
  • +3
  • Проголосовать: не нравится

»
12 лет назад, # |
Rev. 4   Проголосовать: нравится +1 Проголосовать: не нравится

Первая: Ну вроде не сложно. Считаем сколько единиц и всего чисел вылезет из первого символа (предподсчетом можно для любого K заранее, вроде за О(К)). Если единиц мало, уменьшаем N, добавляем ответ, переходим дальше. Иначе запускаемся от строки S или T в зависимости от того 0 это или 1. Наверно нужно аккуратно заменить числа больше 10^18 на INF чтобы не вылазить. Итого это O(K |maxLen|) (вроде это не сложно понять)

Вторая: совсем недавно обсуждалась, поищите

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Я не очень понял( Можно подробнее пожалуйста. Например, мне непонятно "всего чисел вылезет из первого символа "

    • »
      »
      »
      12 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится +1 Проголосовать: не нравится

      Мм.. Рассмотрим первый символ исходной строки. Теперь представим, что у нас исходная строка состоит только из данного символа. Мы можем посчитать длину строки, которая получится из нее за K ходов (простой динамикой). Так же мы можем посчитать сколько там будет единиц.

      Пользуемся тем, что если f(s) — функция "что получится из s за k ходов", то f(concat(s, t) = concat(f(s), f(t))

      Если еще будет не понятно — спрашвайте:)

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Тогда получится, что нужно бежать по символам исходной строки и прибавлять ответ пока N > 0 ?

        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Ну да, бежим по строке, добавляем. В какой-то момент получим, что единиц образуется много(больше чем нам надо), тогда запускаемся рекурсивно от строки S или T в зависимости от символа, снова бежим сначала и т.д. На последнем уровне рекурсии(K +- 1), нужно будет просто натйи нужную по счету единицу.