ARC070D HonestOrUnkind
题意 : 有
这
你可以指定两个人
如果
是好人,那么他会按照事实返回答案,也就是说如果 是好人,答案就为 ,否则为 。 如果
是坏人,那么他会任意选择 和 来回答。
在
若
于是我们只需处理
当
对于询问
列表如下:
(好,好) | ||||
(好,坏) | ||||
(坏,好) | ||||
(坏,坏) |
: 两人中至少有一个是坏人。 : 必是坏人。 : 必是坏人。 : 是同类人。
如果得到了
若得到
这样,两人没人的花费都为
对于
现在有个麻烦,若将连接后的一群人直接看做一个人,则可能不满足
于是,我们不化简一群人,同时避免成群的人参与询问,因为问出个
于是,在一轮处理后,所有剩下的人都两两配对了,此时才能把两个人化简为一个人,继续处理。
有个小问题是可能剩余一个人没有配对。此时若对子有偶数个则将其保留,否则暂时删除。(讨论
不难证明上述算法所需的询问次数
注意标号从