Я недавно присоединился к TopCoder и последние несколько дней тренировался в тренировочных залах. Я столкнулся с этой проблемой, которую не могу решить. Любая помощь будет оценена.
Проблема
Значением произведения строки является
произведение всех цифр ('0' - '9') в
строка. Например, продукт
значение «123» равно 1 * 2 * 3 = 6. A
Строка называется красочной, если она
содержит только цифры и продукт
стоимость каждого его непуста
смежные подстроки различны.
Например, строка "263" имеет шесть
подстроки: «2», «6», «3», «26», «63»
и "263". Значения продукта этих
подстроки: 2, 6, 3, 2 * 6 = 12, 6
* 3 = 18 и 2 * 6 * 3 = 36 соответственно. Поскольку все шесть продукта
значения различны, "263"
красочный.
С другой стороны, «236» не
красочный, потому что два его
подстроки «6» и «23» имеют
та же стоимость продукта (6 = 2 * 3).
Возврат к-й (на основе 1)
лексикографически маленький цветной
строка длиной n. Если есть меньше
чем k разноцветных струн длиной n,
вместо этого верните пустую строку.
Мой подход
Мы не можем иметь «0» и «1» в качестве цифр в n.
Все цифры должны быть разными. Поэтому для начала n должно быть меньше 9. (можно использовать только цифры 2, 3, 4, 5, 6, 7, 8, 9, каждая из которых только один раз).
Поскольку мы знаем это, мы можем начать с «23» (наименьшая двухзначная цветная строка) в качестве базовой строки и добавить одну из разрешенных цифр (проверьте, является ли строка все еще цветной или нет, при каждом добавлении) пока мы не достигнем длины п.
Как только мы достигнем длины n, мы можем «поиграть» с цифрами, чтобы найти k-наименьшее.
Мой вопрос
Я чувствую, что такой подход не будет достаточно быстрым. Даже если и так, каким систематическим образом я должен играть с цифрами, чтобы я начал с самого маленького и пробился через kth-самый маленький?
Как я могу добиться прогресса в этой проблеме с этим подходом? Или есть более разумные способы решения подобных проблем?
Я не прошу никаких решений или чего-либо еще. Я просто прошу несколько подсказок и свинца.
Некоторые проблемы, которые я решаю за считанные секунды, некоторые занимают часы, а некоторые, как это, я не могу это сделать. Но я верю, что все это требует некоторой практики, но я не смогу добиться прогресса без того, чтобы кто-то шел впереди.
Заранее спасибо =)
* кстати, этот вопрос из SRM 464 DIV 2 - 500pt. проблема. Все авторские права принадлежат TopCoder.