Loading

P8849 『JROI-7』hibernal

这种题做一道少一道,不过其中的 trick 还是很值得人总结的,代码就不写了。

注意到我们可以查询两个集合而并非两个连续段,这个性质是很强的。

观察操作次数,不难发现在 \(2 \log n\) 左右,于是考虑两只 \(log\) 在哪里。

一个经典的 trick 是,二进制分组,我们其实可以求出两个金苹果的编号的异或,每次查询每一位,\(1\) 放一组 \(0\) 放一组即可,现在我们需要用剩下 \(\log n - 1\) 次操作求出任意一个金苹果编号。

由于是任意一个,所以第一个二进制位是已知的了。

对于接下来每一位,假设其为 \(1\),将第一位全部为 \(1\) 的和这一位为 \(1\) 的拎出来即可判断这一位的 \(0/1\) 关系。

考虑这么做的合理性,两个编号一定有一个二进制位不同,所以假设第一位不同,如果这个数的第 \(i\) 位为 \(1\),那么它必定不与另一个编号在一个集合,否则一定与另一个编号在另一个集合。

posted @ 2025-09-01 21:21  Alexande  阅读(2)  评论(0)    收藏  举报