-5

我有以下问题。在给定的山上,一个女孩被卡住了,有两条路。一条路径将她带到救援者(左转),第二条路径(右转)将她带到没有机会回来的丛林。现在她遇到了一群说 n 的人,他们总是说实话,有些人说 m 可能/可能不会说实话。给定 n 大于 m。所以女孩可以随便问一个人——救援人员是哪一种方式,问题是她不知道她问的是哪一个人(n 或 m)。我想知道是否有一个 Big Theta (n + m) 算法来找出有多少人说真话?或者严格来说n的值?

我可以自己解决一个更简单的版本。说只有两个人,一个总是说真话,另一个总是说谎。她可以问一个他们都会给出相同答案的问题。例如:对说真话的人,她可以问——“嘿,根据对方的说法,救援者走哪条路?”。说真话的人会说——右转(因为对方说谎)。现在她可以向骗子问同样的问题——他会回答说——右转(因为真正的答案是左转,但由于他总是撒谎,他会说右转)。现在她可以向左走,知道这是正确的答案。

问题在于,在第一种情况下 - 第二组人可能/可能不会撒谎。但我认为关键是 n > m 即总是说真话的人数大于可能/可能不说真话的人数。所以看起来这会抵消一些东西。

任何帮助将不胜感激。谢谢。

4

2 回答 2

2

只需问他们中的任何一个以下问题:

如果您在回答这个问题时与您将要成为的相反,那将是正确的方法?

如果他是撒谎模式中优柔寡断的类型,他将不得不告诉你走错路,因为作为一个说真话的人,他必须告诉你正确的方式,但既然他在撒谎,他就不会。

如果他是说真话的人(或在真相模式下优柔寡断的类型),他将不得不告诉你走错路,因为作为一个骗子,他会这么说。

然后走另一条路。不需要算法,只需O(1)计算。

制作 CW 是因为它并不是真正与编程相关的问题。

于 2013-09-17T09:09:01.737 回答
1

问大家救援人员的方向在哪里。由于n > m,被引用次数较多的方向为实际方向。

于 2013-09-17T09:05:12.190 回答