Facebook编程挑战

时间:2012-08-15 09:56:35

标签: c++ algorithm

Mastermind是两个玩家的游戏。在开始时,第一个玩家决定一个秘密密钥,这是一个序列(s1,s2,...sk),其中0 < si <= n,然后第二个玩家进行轮次猜测,其中每个猜测的形式为(g1,g2, ...gk),并且每个猜第一个玩家计算猜测的分数。猜测得分等于我们{i}的数量{。}}。

例如,如果密钥为gi = si且猜测为(4,2,5,3,1),则分数为2,因为 (1,2,3,7,1)g2 = s2

给定一系列猜测和每个猜测的分数,您的程序必须确定是否存在至少一个生成这些精确分数的密钥。

输入

第一行输入包含一个整数 C g5 = s5。 C测试案例如下。每个测试用例的第一行包含三个整数 n k q (1 <=C <= 100)。接下来 q 行包含猜测。

每次猜测都包含由单个空格分隔的 k 整数(1 <=n,k <=11, 1<=q<=8),后跟猜测的分数 bi gi,1, gi,2,....gi,k

输出

对于每个测试用例,如果至少存在生成那些精确分数的密钥,则输出“是”(不带引号),否则输出“否”。

示例输入

(1 <= gi,j <=n for all 1 <=i <=q, 1 <=j <=k; and 0 <= bi <=k )

示例输出

2
4 4 2
2 1 2 2 0
2 2 1 1 1
4 4 2
1 2 3 4 4
4 3 2 1 1

除了暴力之外,我无法想到任何其他事情,即通过生成所有可能的密钥并检查所有猜测的相应分数 复杂性非常高,将做大约(11 ^ 11)* 8次操作

Plz建议如何及时做到这一点?

时间限制:3秒

1 个答案:

答案 0 :(得分:2)

这与bulls and cows游戏非常相似。网上有很多关于它的信息,在维基文章中你可以找到实现的链接。它应该很容易适应你的确切挑战。