2024.7 做题记录
409. P10704 救赎(Redemption)
不依赖 的做法。
设 为有多少个 使得 。
设一个阈值 。当 时 ,可以直接枚举 和 然后利用 数组统计。这部分时间复杂度为 。
当 时,统计 之和可以转化为对于一个整数 ,有多少对 满足 即 。可以排序后双指针统计。这部分时间复杂度为 。
总时间复杂度为 。取 可以通过。
410. P10716 【MX-X1-T4】「KDOI-05」简单的字符串问题
一个 合法的充要条件为:
- 为 的一个 border;
- 在 中不重叠地出现 次。
建出失配树后,发现合法的 在树上组成一条某个点 到根的链,且 为 的祖先。因此我们若知道 ,答案就是 。
考虑倍增求出 。相当于要 check 这样一个问题:
- 的第 次不重叠出现位置是否 。
考虑预处理出每个前缀 对应的串在整个串中的不重叠出现位置。相当于每次找到一个位置后面第一个后缀,使得它与整个串的 LCP 长度 ,然后跳到它。跳的步数最多是 所以可以暴力跳。
一个后缀与整个串的 LCP 长度可以想到 Z 函数。用并查集维护链表的 trick,从小到大枚举 ,处理完 后把 的所有位置 删了,使得处理到 时,并查集中 的位置为代表元。这样即可 求出一个位置后面第一个 使得 的 。
注意特判 。
总时间复杂度 。
411. CF1975F Set
412. CF1732E Location
413. CF1677E Tokitsukaze and Beautiful Subsegments
唉,套路题。
求出以每个 作为最大值的区间范围 。再找到全部 的位置 ,那么同时包含 且是 的子区间的区间 是合法的。
于是原问题变成了一个矩形覆盖矩形求和的问题。太困难。
但是发现矩形有交当且仅当它们从同一个 产生,所以可以对于所有的 做一个类似单调栈的东西(就是去除所有覆盖范围被其他 完全包含的点对),然后就可以转化成矩形加矩形求和。可以树状数组解决。
时间复杂度 。
414. CF961F k-substrings
发现往头尾各添加一个字符后,border 的长度至多增加 。
于是按串长从小往大推即可,哈希判一下当前的长度是否为 border。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2023-07-07 20230707 讲题