【发布时间】:2015-12-08 16:58:31
【问题描述】:
有一个奇怪的 10 个字符的字符串,即 '0' 或 '1'。我有 n 个过滤器字符串,每个字符串都有 10 个字符 ether '0' 或 '1'。过滤器字符串中第 i 个位置的 '1' 意味着如果我将此过滤器应用于奇怪字符串的第 i 个字符,则奇怪字符串的第 i 个字符将被反转:如果它变成 '1'是'0',反之亦然,而过滤器字符串中第i个位置的'0'不会对奇怪的字符串做任何事情。我可以应用任意数量的过滤器。我可以选择任意数量的过滤器,并且可以应用于奇怪的字符串。现在我想找出我可以应用多少个不同的过滤器子集来转换这个奇怪的字符串,以便奇怪的字符串只包含 1?我无法将问题概括为任意数量的字符串。任何人都可以帮忙。
让我们有一些测试用例
输入奇怪的字符串:
1111111111
过滤字符串总数:
2
输入过滤字符串 :
0000000000
0000000000
输出为:4
说明:奇怪的字符串已经包含所有字符 1,我有两个不同的身份过滤器。我可以应用过滤器的空子集、仅应用第一个过滤器、仅应用第二个过滤器,或两者都应用。
输入奇怪的字符串:
0101010101
过滤字符串总数:
3
输入过滤字符串:
1010101010
1010000000
0000101010
输出为:2
说明:我可以应用第一个过滤器(并将所有 0 反转)或以任意顺序应用第二个和第三个过滤器。
【问题讨论】:
-
有可能没有一个过滤器能让你进入全 1 的状态,是吗?
-
请参阅commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/… 获取方法getLevenshteinDistance。这将告诉您奇怪的字符串和 1111111111 之间有多少位不同。如果您有 n 个输入字符串,您可能需要通过由幂集组成的过滤器的 2^n 次应用。例如,假设您有 3 个过滤器字符串 a、b 和 c。您必须应用 2^3 个过滤器:null、a、b、c、ab、ac、bc、abc。吃两片阿司匹林,稍后再给我打电话。
-
您的具体问题是什么?你不知道如何编码排列?或者你需要证明应用过滤器的操作不依赖于过滤器的应用顺序,这样你只需要过滤器集合的排列?
-
想想当你对原始字符串应用过滤器时会发生什么。现在你有一个新的字符串和 1 个更少的过滤器需要担心。使用递归来减少问题,直到您可以轻松处理它。
-
这个问题与this ongoing contest problem有显着的相似之处,N限制为100000
标签: c++ math combinations permutation