题解:P12797 [NERC 2022] Hot and Cold

· · 题解

题目传送门

思路

神秘方言题。

显然是二进制拆分的思路。题目要求 64 次询问出结果。那么由于范围最大达 10^6,则每次询问通过 3 \times \log(10^6)\approx3 \times 20=60 可知只能询问 3 次。所以剩下有 4 次机会来确定方言

我们询问 3 次问出词义,通过询问 3 次分别为 (0,0)(1,1)(0,0),确定 (1,1)(0,0) 离目标点的关系。

若已经找到,则停止。该步骤之后每次询问之后都要加,不再赘述。

若没找到,即结尾不是感叹号,则如果两次字符串结果相同,则答案一定在 (1,0)(0,1) 之间,直接询问即可。

否则我们知道答案一定不是 (1,0)(0,1),则 (1,1) 询问的结果一定是更近(0,0) 询问的结果一定是更远

所以 3 次可以确定词义。

接下来,每次缩小范围只能询问 3 次,如果可以询问 4 次可能这题就是个绿。我们把 xy 的操作一起算,就可以减掉分开算的多余操作。

询问当前范围中心点,在询问中心点上面一个点(相距 1 单位长度),然后在询问中心点右上角的那个点,可以确定下来目标点在中心点哪个方向。即:\ 记此时的范围是 (lx,ly)(rx,ry),则定义 midx=\frac{lx+rx}{2},miny=\frac{ly+ry}{2}(midx,midy) 即为中心点。再询问 (midx,midy+1),可以确定目标点在中心点的上面还是下面。我们假设是在上面,下面同理。然后询问 (midx+1,midy+1),则可以确定目标点是在中心点上方的左边还是右边。

所以 3 次操作可以把 xy 均砍一半,则总的询问次数为 3 \times \log(10^6)\approx3 \times 20=60,加上确定词义的 3 次,共 63 次,可以通过。

\text{AC} 记录。