Блог пользователя igor.pisarev

Автор igor.pisarev, 10 лет назад, По-русски

Пытаюсь решить задачку, закопался.

Вкратце, нужно найти количество N-значных чисел, у которых абсолютная разность между любыми двумя соседними цифрами не меньше K.
Ограничения: 2 ≤ N ≤ 109, 0 ≤ K ≤ 9. Ответ нужно посчитать по модулю 109 + 7.

Попробовал вывести рекуррентные формулы для количества комбинаций из i разрядов, а затем, так как ограничения довольно внушительные, находить ответ путем возведения матрицы перехода в степень.

Формулы получились следующие:
K = 9: Fi = Fi – 1 = 1 (ведущих нулей быть не должно, поэтому единственный возможный вариант 90909...)
K = 8: Fi = Fi – 1 + Fi – 2 (как Фибоначчи, только с другими начальными значениями, которые можно считать, например, перебором)
K = 7: Fi = 2·Fi – 1 + Fi – 2 – Fi – 3
K = 6: Fi = 2·Fi – 1 + 3·Fi – 2 – Fi – 3 – Fi – 4
K = 5: Fi = 3·Fi – 1 + 3·Fi – 2 – 4·Fi – 3 – Fi – 4 – Fi – 5

Далее становится чуть сложнее, например, при K = 4 от цифры 5 возможные варианты продолжения — 0, 1 и 9, и не очень понятно, как теперь меняется количество комбинаций.

Такое ощущение, что у этой задачи есть более простое решение, прошу поделиться или намекнуть.

Полный текст и комментарии »

  • Проголосовать: нравится
  • +9
  • Проголосовать: не нравится

Автор igor.pisarev, 11 лет назад, По-русски

Привет!
Пытаюсь решить следующую задачу, найденную на одном из форумов:

Две строки могут быть перемешаны путем вставки символов первой строки между символами второй (с сохранением их порядка). Рассмотрим перемешивание двух одинаковых строк - близнецов.
Например, строка AAABAB может быть получена путем перемешивания двух строк AAB.
Дается строка, необходимо определить, могла ли она быть получена путем перемешивания двух некоторых строк-близнецов.  
(другими словами, можно ли вычеркнуть половину символов так, чтобы строки, образованные вычеркнутыми и оставшимися символами, совпадали)

Логичная предпроверка: необходима четность каждого символа (XOR всех символов == 0).
Далее, ничего не удается придумать, кроме полного рекурсивного перебора O(2^N) :(

Как можно решить задачу более эффективно?

Полный текст и комментарии »

  • Проголосовать: нравится
  • +20
  • Проголосовать: не нравится