CF2096G Wonderful Guessing Game 构造
题解
首先考虑没有 ? ? ? 回答的时候,答案是多少。
猜猜需要多少个询问。
⌈ log 2 n ⌉ ? ⌈ log 3 n ⌉ ? \lceil \log_2n\rceil ? \lceil \log_3n\rceil ? ⌈log2n⌉?⌈log3n⌉?
可以构造一个表,行表示不同的询问,列表示不同的元素,每个格子表示该元素如果是答案,在这个询问下应该有的回答。
例如:
假如我们令 R R R 为 1 , L L L 为 − 1 -1 −1 , N N N 为 0 .
那么我们实际上要往这个表中填入三种数字,使得任意两列不完全相同,而且每行的和为 0 0 0 。
怎么构造?
每次选出 ( x 1 , x 2 , . . . , x k ) (x_1,x_2,...,x_k) (x1,x2,...,xk) 时,将 ( − x 1 , − x 2 , . . . , − x k ) (-x_1,-x_2,...,-x_k) (−x1,−x2,...,−xk) 也加入其中即可,其中 k k k 为行数。
注意 ( 0 , 0 , . . . , 0 ) (0,0,...,0) (0,0,...,0) 比较特殊,而且要保证不能有重复选择的 k k k 元组。
这个也比较简单,保证每个枚举元组的前缀 0 后第一个元素是 1 即可。
可是现在要选择一个询问进行忽视。
那么说明我们构造的这个表格有一行会直接被标为空,相当于对于任意两列,都有至少两个位置不相同。
显然我们需要一定要增加一个询问,证明可以通过信息熵的角度来证明。
如何构造?
也就是我们要加一次询问(一行),尝试让原来两列相差恰好一个元素的变成相差两个元素。一个非常直观的想法就是在每一列的最后都加上该列模三意义下的和。