1 条题解
-
0
自动搬运
来自洛谷,原作者为

vzcx_host
vzcx 系列第一站搬运于
2025-08-24 22:44:22,当前版本为作者最后更新于2023-09-06 08:38:23,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
在本题解中,约定 ,所有数组下标均从 开始编号。
题意简述与分析
现有一个长度为 的数组 ,满足 ,且已知 。
对于一个长度为 的 01 串 ,定义 , 为 的反函数。
二进制加法的法则是“逢 进 ”,由定义可知,对于任意两个长度为 的 01 串 , 的值就是对 和 做“逢 进 或 ”的“二进制加法”后得出的结果,也可以发现,题目中的加法运算与这里的加法完全一致。(讲的不够清楚,但这一段非常重要)
同样,由于加法运算的存在,证明了 存在反函数 。
现每次询问要求给出两个长度为 的 01 串 ,交互库会返回 ,用尽量少的询问套出 数组。
题目补充:三个 Subtask 的 分别为 。
Solution
定义 。
若 的第 位发生进位,且之后的所有位均为 ,则 的第 位后会出现一段连续的 ,其中最高位的 所在位与第 位同号,中间的 所在位与第 位异号。
对每一位分开询问即可,最大询问次数为 ,可得 分。
在上一个做法中,我们让每次询问恰好发生一次进位,这样会大幅度浪费询问次数,考虑多进程询问。
考虑分块,一次进位要么只会影响该位所在的块内的部分,要么会发生“跨块”。如果某一个块发生“跨块”,那么这个块内的所有位会被全部做完,所以“跨块”最多会发生 次,当跨块发生时停止处理后面的块即可。
询问上限 ,可以通过本题。
以上为标算的做法,接下来,我们要开启快乐的踩标之旅!
反过来考虑,如果我们令 ,得到的 必然为一段 后跟一段 ,其中最高位的 与最低位异号,其余的 与最低位同号。我们还可以发现,更高位的 还可以供我们多线程询问。
因此,对于当前要解决的区间 ,其中 与 同号, 与 异号,我们可以对 做一次单点询问,对得到的最高位的 所在位 再做一次单点询问,设第二次询问得到的最高位的 在第 位,我们可以确定 与 同号, 与 异号, 与 同号。同时,原区间被分为了两个区间 和 ,子区间依然满足原区间的性质,由于中间的异号位充足,两个子区间不会对对方产生影响,多个不交的区间同时进行即可。
询问上限 ,完成一般踩标。
我们想想当询问利用率达到极限会发生什么。
令 ,对于 某一位,若该位与下一位同号,则下一位会进 ,下一位会正常进位;若该位与下一位异号,则下一位会退 ,下一位不会进位,带来的影响就是再下一位必定为 。
因此,若 的第 位为 ,则它的上一位和上上位异号,它和上一位的关系不知道,对不知道的关系做一次统一询问即可。由于两个询问位之间必定有一组异号关系,按最原始的方法询问不会出现互相影响的问题。
询问上限 ,完成爆踩标算。
- 1
信息
- ID
- 8344
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者