我已经在math.stackexchange上问了这个问题,但没有得到任何答案。
问题是要解决一个两人猜数字游戏。假设第一个人为 A ,第二个人为 B 。 A在1和上限x
之间选择数字n
。 B 以(L,R)的形式对 A 进行查询,如果间隔中存在数字(< L,R)都包括在内。
B 将需要询问一组查询才能唯一确定数字x
。因此,问题在于找到这样不同的查询集的数量,以使 B 能够唯一确定x
,而与x
的值无关。 A 返回整个系列查询的答案- B 仅在将 all 设为查询。
例如,假设n
为2。可能的查询集为
{(1,1)},
{(2,2)},
{(1,1),(2,2)},
{(1,1),(1,2)},
{(2,2),(1,2)},
{(1,1),(2,2),(1,2)}
问题:如何确定这些查询集中的哪些将唯一地标识 A 可能选择的任何整数?
我认为我们需要以某种方式将所有可能的数字从1隔离到n
,否则无法唯一地确定数字。但是我不知道该怎么做。
答案 0 :(得分:0)
设置1号以检测数字:
1
设置为所有单对:{{1,1},{2,2},...,{N,N}}
设置2号以检测数字:
N
包含一对,其中一对除外:{{1,1},{2,2},..,{x-1,x-1},{x+1,x+1},..,{N,N}}
无法识别号码的配对:
N-1
对,长度为2:{1,2},{2,3},,{N-1,N}
N-2
对,长度为3:{1,3},{2,4},,{N-2,N}
...
2
对,长度为N-1
:{1,N-1},{2,N}
1
对,长度为N
:{1,N}
无用对的总数为:
K = (N-1) + (N-2) + ... 2 + 1 = N*(N-1)/2
无用集合的总数为:
Z = C(K,0) + C(K, 1) + ... + C(K, K) = 2^K
查询数量
要找到答案,我们需要将所有正确的集合与所有其他类型的集合结合起来。
ANSWER = (Number of set #1 + Number of sets #2) * Z = (1 + N) * (2^K)
UDP :答案有误,请参见下面的评论