Solution Set -「LOCAL」冲刺省选 Round VII
三道结论题,毁灭吧。
A 题一开始思路偏了,发现答案最高 bit 能固定之后接下来的结论就顺理成章了。
B 题哈哈哈哈又是经典:我结论猜对了,然后心里给念叨,念着念着嘴瓢了,写暴力出来错了,然后就没分了。
C 题:你怎么不放 A 题?
策略不对头啊哥,你怎么没先发现 C 题最水呢?这样真的很危险。
合成小丹
给定可重集 ,进行 次以下操作之一:
-
取 ,令 ;
-
取 ,令 。
其中 是按位与, 是右移。最终 ,求出可能的最小 。
,,。
把原问题说好听点:在 里选一些数做 1. 操作,最小化结果 。根据经验,位运算下的最小化问题很有局部性,我们可以尝试先最小化 的最高 bit。
记 。在这一目标下,显然,当且仅当 ,对 的操作才是有意义的。我们按 降序模拟,看看最低能在哪个 处留下一个数。记此时的 值为 。可见,。
由于 ,那么对于每个数 ,若它参与了 的合成,则它至少被 了 次。当然,这一次数的实际值越小,我们就更有可能合成出 最小的 。这印证了我们在上文直接按照 这一 次数对 进行的归类的确能求到最小的 。
想一想,被额外 的数就没用了吗?并不。我们可以用它们作为 1. 操作的“炮灰”,让另一个数被 ,甚至,“炮灰”和“炮灰”还能在 1. 操作中合成更“厉害”的“炮灰”。
回到解题,既然 定了,我们可以从高到低枚举 的 bit,检查这一 bit 能否取 (局部性)。根据上文结论,对于每个数 ,我们可以求到它至少被 多少次后,被 入 ,才不会破坏已经确定的高位 bit 和当前 bit 假定的 。被 的次数越小越好嘛,我们直接把这一次数当做 的 ,在此模拟上文求 的操作,看看能不能把同样的 取出来。若能,则这一 bit 可以为 。
暴力实现是 的,不过瓶颈是位运算和整数自加,而且难卡,所以我过了。对 中每个 分别构造对每个数 的右移次数限制,精细实现可以做到 。讲个笑话,有人 过了。
路过中丹
对于字符串 ,成一个合法遍历 ,满足 ,且 是回文。若 的每个下标都能存在于一个合法遍历中,则 合法。给定字符串 以及 次询问,每次给出 ,询问 是否合法。
。
手玩一下样例:若存在 ,则 合法。
证明,构造遍历:,是回文。另一侧同理。
另一个显然的结论:若 中的每个字符都存在于某个长度大于 的回文串中,则 合法。(草了,我上面那个对了这个胡错了。)
经讨论可以说明:不存在其他有效的遍历方案使得不满足这两个条件的 合法。
怎么维护?第一个结论直接记前缀和。第二个,Manacher + 单调栈求出 中从 开始的最短回文串结束位置 ,以及到 结束的最短回文串开始位置 。 合法,当且仅当满足第一个条件,或者不存在 ,使得 。按照询问右端点离线,BIT 维护一下每个左端点的合法情况即可。复杂度 。
膜拜大丹
有一个有向图 ,结点编号 。对于结点 ,;对于结点 ,;不存在其他边。现限定 最多存在于 个简单环中, 最多存在于 个简单环中,求能取出多少个简单环。
。
显然:
- 最优情况下,环是二元环;
- 按编号降序选二元环,答案最优。
降序枚举 ,维护在 里能作为二元环另一个端点的结点集合,模拟即可。复杂度 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现