题意
王子想要娶公主,但是需要完成一个挑战:在一些房间中找出公主在哪。
每个房间有一个人,他们彼此知道谁在哪个房间。可以问他们三种问题:
- 你是谁?
- 在某个房间是谁?
- 公主在哪个房间?
有三类人,一类一定说真话,一类一定说假话,一类可能说真话可能说假话。
王子知道这三类人的人数分别为 $a$, $b$, $c$,求能否通过问一些问题找到公主在哪,如果能,输出最少需要的问题数。
思路
第三类人有可能说假话,因此最坏情况就是说假话,所以把他们视为第二类人。
首先问所有人第三个问题,那么最坏情况就是说真话的人都说出公主的位置,说假话的人都选择一个不是公主的人说他是公主。所以最后只会问到两个位置。那么只要说真话的人数量比较多,就一定能确认公主在哪个房间。否则是无法确定的。所以我一开始以为问问题的次数为 $a + b + c$。
后来队友给了个样例,发现其实不需要问这么多,只要说真话的人比说假话的人多就行。也就是说假话的只有 $b + c$ 个人,那么只要再问说真话的 $b + c + 1$ 个人就可以了。
还有特殊情况,就是所有人都说真话,只要问一个人就行了。
还有更特殊的情况(队友想到的),就是 $1 0 0$ 的情况,不需要问问题,因为那个人就是公主。
代码
1 |
|