К списку задач
Сложно Решено: 0 Процент решений: 0%

Подсчёт чисел с различными соседними цифрами

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

Чему вы научитесь

  • Считать числа до границы по цифрам
  • Отслеживать предыдущую цифру и прижатую границу
  • Отвечать для отрезка как f(b) - f(a - 1)

Условие

Посчитайте целые числа от left до right включительно, у которых нет одинаковых соседних цифр. Используйте их обычную десятичную запись без ведущих нулей. Ноль и все остальные однозначные числа подходят под условие.

Реализуйте функцию counting_numbers(left, right).

Ввод

left: Первое допустимое значение.

right: Последнее допустимое значение.

Вывод

Верните количество значений, удовлетворяющих правилу.

Ограничения

0 ≤ left ≤ right ≤ 10¹⁸. Диапазон может быть слишком большим, чтобы проверять каждое число по отдельности.

Примеры

Пример 1
Ввод:
left = 10
right = 15

Ожидаемый вывод:
expected = 5
Ввод:
long long left = 10;
long long right = 15;

Ожидаемый вывод:
long long expected = 5;
Ввод:
long left = 10;
long right = 15;

Ожидаемый вывод:
long expected = 5;

Пояснение

Только 11 имеет одинаковые соседние цифры. Остальные пять чисел подходят.

Пример 2
Ввод:
left = 0
right = 9

Ожидаемый вывод:
expected = 10
Ввод:
long long left = 0;
long long right = 9;

Ожидаемый вывод:
long long expected = 10;
Ввод:
long left = 0;
long right = 9;

Ожидаемый вывод:
long expected = 10;

Пояснение

Все десять значений состоят из одной цифры и, следовательно, не имеют одинаковых соседей.

Как подступиться

Сначала попробуйте сами, затем открывайте подсказки по одной.

Подсказка 1

Считайте подходящие числа до каждого конца отрезка, затем вычитайте и получите ответ для диапазона.

Подсказка 2

Подходит digit DP, потому что допустимость зависит от соседних цифр и от того, начали ли вы число.

Подсказка 3

Нули в начале требуют отдельной обработки, чтобы более короткие числа считались правильно.

Ожидаемая сложность

O(k * 10 * states) по времени, O(k * states) доп. памяти

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

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