border 专项训练
A
显然可以分治计算,我们只需要计算跨过中点(含
那么这就相当于是枚举匹配位置,查前面的后缀和后面的前缀能否匹配,可以暴力地贪心扩展若干轮直到
复杂度大概是
不过也可以推一推贡献系数来做?
B
设
考虑
问题变为求出
观察下标形式 KMP 算法可以发现,若 打表证明,这些是不需要改动的,所以我们只需要从
而
也就是设
求出
怎么打表发现只会删较小部分啊
根据
啊,我们发现 虽然这近乎显然
则有
然后多出来的部分是什么呢?我们就只需要考虑
而且也恰恰是这一部分值,拿出来计算就好了?你找到第一次跳到
总变化量
C
感觉和 Two Permutations 是一个题啊。
做
考虑指针扫描,加入一个数字相当于:
- 查找它的排名,将大于它的元素的排名加一
删除一个也基本一样
利用权值线段树维护位置哈希即可。
D
首先可以拿到特殊情况:无周期的串,显然有 0000…01
这种形式,而全周期的串显然有 111111/000000
这种形式
一个有完整周期的串可以由那个周期,也就是
接着考虑一个有完整周期的串,也就是
但是可能会出现问题,也就是形如 000 + 00 + 000
之类的情况,也就是
不过一个很显然的地方是答案序列第一项肯定是
E
作为答案的肯定是个 border,而我们所需的是最短的,将其与原串匹配可以覆盖整个原串的border。
考虑
- 若
,则可以扩展到 ,更新 - 否则只能取自己,
F
其实就是每个前缀跳
G
可以想到一个东西:在字符串
有效最小后缀假设存在两个
且 ,则显然 是 的 border 那么可以假设
,外加一个 ,若 而这当然是不可能的,因为 优于 与假设不符
有个想法就是动态
比较这一步如果可以
可以给出Z函数来做,因为有效后缀肯定是互为前缀的 。
对于当前的有效后缀
,假设 ,则 ,后面就转化为了后缀 与 的大小关系判断。 利用 Z 函数找到第一个不同位置判断即可。
需要注意的是可能
,这时候相当于跳到了 这个后缀比较了。
判断非法元素是如何做的呢?
很简单啊,所有的串都会新增一个结尾,仅比较这个位置即可,然后还需要用长度来判断一下。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!