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

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

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

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

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

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

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

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

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

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

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

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

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

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

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