【发布时间】:2010-07-19 21:23:12
【问题描述】:
我最近加入了 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)。
返回第 k 个(从 1 开始) 字典最小的彩色 长度为 n 的字符串。如果少 比 k 个长度为 n 的彩色字符串, 而是返回一个空字符串。
我的方法
我们不能将“0”和“1”作为 n 中的数字。 所有数字必须是不同的。所以首先,n 应该小于 9。(只能使用数字 2、3、4、5、6、7、8、9,每个数字只能使用一次)。
既然我们知道,我们可以从“23”(最小的 2 位彩色字符串)作为基本字符串并添加一个允许的数字(检查字符串是否仍然是彩色的,每次添加)直到我们达到长度 n。
一旦我们达到长度 n,我们就可以“玩弄”这些数字来找到 k 最小的。
我的问题
我觉得这种方法不够快。即使是这样,我应该以什么系统的方式来玩弄数字,以便我从最小的开始,通过第 k 个最小的方式?
我怎样才能用这种方法在这个问题上取得进展?还是有更聪明的方法来解决这类问题?
我不要求任何解决方案或任何东西。我只是在寻求一些线索和线索。
有些问题我可以在几秒钟内解决,有些需要几个小时的思考,有些我做不到。但我相信只需要一些练习,但如果没有人带路,我就无法取得进步。
提前致谢 =)
*顺便说一句,这个问题来自 SRM 464 DIV 2 - 500pt。问题。所有版权归 TopCoder 所有。
【问题讨论】:
-
根据问题陈述,0 是有效数字。它只是使产品价值不明显。数字 1(一)也是有效的。它可能会或可能不会使产品价值与众不同;取决于剩余的数字。
-
@Thomas 但如果产品价值不明显,则根据定义,该数字不是“彩色”,因此不是潜在的解决方案。
-
“0”是第一个长度为1的彩色字符串。还有9个
标签: algorithm language-agnostic