Loading

AT_arc070_d [ARC070F] HonestOrUnkind

个人感觉这道题比 I 君的商店第一步还要困难,I 君的商店第一步好歹大概知道咋做,这题感觉做法完全没有道理。

首先 \(a \le b\) 肯定无解,因为无论如何 \(a\) 成为不了众数,\(b\) 可以轻易通过操纵结果达成任意局面。

如果 \(a > b\),我们考察求出一个说话是真的人的位置,刚开始想固定一个人,然后递归去求解,后面发现询问常数完全没有道理。

想要类似 I 君的商店一样做,但是想了很久也无法通过维护常数个自由元来固定目前信息,于是倒闭了。

正解做法非常牛逼,我们考察输出 YES 和 NO 的结构,这里先考察 NO 的:

  1. YES, NO
  2. NO, YES
  3. NO, NO

这意味着两者必定有一个是 NO,因此,我们如果查询两个元素是 NO,那么可以都丢掉(显然之后仍然 \(a > b\))。

问题是如果输出 YES 该怎么办,非常巧妙的一点是,分析 YES 的结构:

  1. YES, YES
  2. NO, YES
  3. NO, NO

你发现无论如何 YES 都在 NO 前面!你维护一个序列表示前面都是 YES 后面都是 NO,然后遇到这种情况直接插入到开头即可!最后开头总有一个 YES 因为 \(a > b\)

个人认为这种题总结的规律是利用交互信息构造一个广义 \(\max\) 函数进行递推求得特值。

posted @ 2026-09-18 11:24  Alexande  阅读(9)  评论(0)    收藏  举报