CF741E Arpa’s abnormal DNA and Mehrdad’s deep interest
感觉
给出两个字符串
,记 表示在 和 插入 得到的字符串。若 表示在开头插入,若 表示在结尾插入。 形式化的,
。 有
次询问,每次询问给出 。你需要求出满足 且 的所有 中, 字典序最小的 。若有多个这样的 ,答案为最小的那个 。或报告无解。
。
。
本题做法大致由两个部分拼起来。
考虑将所有二元组
考虑比较字符串大小的方法,找到 vector
存放一个字符串的所有段,用哈希进行字符串匹配,每次匹配到段端点。如果到段端点全部匹配,就进行下一段。否则比较失配位置的大小。
注意要多模,我使用了自然溢出和【】生日。
若两个字符串相同就比较 stable_sort
进行排序。
时间复杂度为
做完
看到带
-
我们令
。此时 。枚举 ,就可以得到满足条件的 在 个区间内。用ST
表维护区间最小值,枚举这些区间进行查询。 -
我们考虑对于每个
单独求解。此时 。即只会有 种余数。再对于每种余数 ,将 的位置的排名按顺序放入一个数组,然后对这些数组维护ST
表。容易得知对于某个特定的余数, 内的位置 在新数组中的位置也是一个连续的区间。并且这些数组的总长度为 。因为每一种余数只会有 个位置,乘以 就是 。那么对于这些数组建立ST
表的时间是 。然后遍历每一个询问,枚举
中的每一个余数,此时枚举量为 。然后得到在 内的 在当前余数对应数组中的区间,查询区间最小值即可。
时间复杂度为
取
若把 ST
表换成四毛子,可以做到时间复杂度
易知极限数据下瓶颈为
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统