我发现写 Solution Set 就不用写每道题的题意了,岂不美哉?


  首先是一些奇妙结论。

  定理 1(弱周期定理) 对于字符串 \(S\),若 \(S[:p]\) 和 \(S[:q]\) 都是 \(S\) 的周期,且 \(p\not=q,p+q\le|S|\),则 \(S[:\gcd(p,q)]\) 也是 \(S\) 的周期。

  证明 考虑更相减损,不妨令 \(q>p\),则只需证 \(S[:q-p]\) 为周期。注意到 \(\forall i\in[1,|S|]\),总有 \(i>p\lor i\le|S|-q\) 成立,对于前者,\(S_i=S_{i-p}=S_{i-p+q}\);对于后者,\(S_i=S_{i+q}=S_{i+q-p}\)。故 \(S[:q-p]\) 为周期。 \(\square\)

  这个定理“弱”在 \(p+q\) 的范围,该范围可以扩大到 \(p+q\le|S|+\gcd(p,q)\),在此略过。

  定理 2

  1. 字符串 \(S\) 中所有 \(\ge\frac{|S|}{2}\) 的 border 可排列为一个等差数列。
  2. 若字符串 \(S\) 的最长 border \(p\ge\frac{|S|}{2}\),则 \(d=n-p\) 是周期;集合 \(B=\{q\in[1,p]\mid q\equiv p\pmod d\}\) 均为 border;且 \([d,p]\) 内的所有 border \(B'\subseteq B\)。(注意区间左端点。)
  3. 对于字符串 \(S,T\),集合 \(\left\{k\in\left[\frac{|S|}{2},\min\{|S|,|T|\}\right]\mid S[:k]=T[|S|-k+1:]\right\}\) 可排列为一个等差数列。

  证明

  1. 记 \(|S|=n\)。取最大的满足条件的 border \(p\),那么由 定理 1,对于任意满足条件的 border \(q\),有 \((n-p)\mid(n-q)\),且任意满足 \(q\ge\frac{|S|}{2}\land(n-p)\mid(n-q)\) 的 \(q\) 均为 border。因此,可得一个公差为 \(n-p\) 的等差数列。 \(\square\)

  2. 这是与上一定理形似,但应用更广的扩展。显然 \(d\) 是周期且所有 \(q\in B\) 为 border,我们还需要说明 \([d,p]\) 内不存在其他形式的 border。反证,若存在一个 \(r\in[d,p]\setminus B\) 为 border,则能取出一个 \(q\in B\),使得 \(q,r\) 同属一个周期且 \(|q-r|<d\)。通过说明 \(d'=|q-r|<d\) 也是周期,我们能找到一个大于 \(p\) 的 border,继而导出矛盾。具体讨论见下图:

    例如 \(r=|GH|,q=|IJ|,d=2\)(网格线单位为 \(1\)),通过在 border 和周期间代换,我们发现在串 \(KM\) 中,\(d\) 是大于半串长的 border,而 \(d'=|HM|\) 便是其周期。继而 \(d=kd'\),所以 \(d'\) 是原串周期。接着上文的讨论,我们导出了矛盾。 \(\square\)

  3. 类似地,取最大的满足条件的 \(k=p\),那么任意 \(k\) 均为 \(S[:p]\) 的 border,且 \(S[:p]\) 的 border 均满足条件。此后同理可证。 \(\square\)

  举一个 定理 2.(1) 的经典使用例子:确保无法均摊复杂度的 KMP(e.g. Trie 上 KMP)复杂度不超过 \(\mathcal O(n\log n)\)。

  定理 3 长度为 \(n\) 的字符串 \(S\) 的所有 border 可划分为 \(\mathcal O(\log n)\) 个等差数列。

  证明 令 定理 2.(3) 中的 \((S,T)\) 为 \((S,S),(S[:|S|/2],S),(S[:|S|/4],S),\cdots\),分别可证长度在 \([|S|/2,|S|],[|S|/4,|S|/2],\cdots\) 的 border 构成等差序列。由于是复杂度上界我们也没必要考虑边界取不取, 因此得证。此外,我们还能说明,可以按从大到小或从小到大的顺序贪心构造等差数列,这种构造方法能够确保复杂度。 \(\square\)

  个人感觉不涉及自动机等模板化算法的字符串题都比较神奇,而 border 又算最神奇的考点,所以相关结论(esp. 定理 3)还是在脑中留个印象比较好√


  「洛谷 P5829」「模板」失配树 + 额外限制:空间 \(\le 10\text{ Mib}\)。

  不妨记 \(S[:i]\) 的最长 border 为 \(\operatorname{next}(i)\),若没有严格空间限制,显然可以在边 \((\operatorname{next}(i),i)\) 构成的树上求每对 \(p,q\) 的 LCA。

  额外的限制要求我们对上文定理的灵活使用。不妨设 \(p>q\),取当前 \(r=\operatorname{next}(p)\),讨论

  • \(r<\frac{p}{2}\),可见简单地令 \(p\leftarrow r\) 是可以保障复杂度的;
  • \(r\ge\frac{p}{2}\),注意 \(r\) 是 \(S[:p]\) 的最大 border,由 定理 2.(2),若 \(q\equiv r\pmod{p-r}\),则答案为 \(q\);否则令 \(p\leftarrow (r\bmod (p-r))+(p-r)\)。(我们无法保证 \([1,p-r]\) 内无其他形式的 border。)

  复杂度显然为 \(\mathcal O(n+m\log n)\),明显于一般的求 LCA 方法(你写四毛子当我没说 w)。


  「洛谷 P1393」Mivik 的标题

  这种匹配计数题一般是用 border 来转移 DP。设 \(l=|S|\),\(B\) 为 \(S\) 的真 border 集合。从暴力入手,令 \(f(i)\) 表示生成了前 \(i\) 个字符,恰好得到一个 \(S\) 的方案数。容斥计数,对于 \(i\ge l\),显然有

\[f(i)=m^{i-l}-\sum_{j\le i-l}f(j)-\sum_{j\in B}f(i-l+j).
\]

第一个和式可以前缀和优化,第二个和式,利用 定理 3 拆分为 \(\mathcal O(\log l)\) 个等差数列上的 \(f\) 之和,亦可前缀和优化。最终复杂度为 \(\mathcal O(n\log l)\)。


  「HNOI 2019」「洛谷 P5287」JOJO

  询问显然可以视为树形结构,相当于需要在树上 KMP。

  发现当两个子串匹配时,它们的二元组表达几乎是一致的,只有左右两端可能不同。所以我们的第一个问题是设计一个基于二元组的 \(\operatorname{next}\) 定义。定义两个二元组串 \(S=(S_1^c,S_1^x)(S_2^c,S_2^x)\cdots\) 和 \(T=(T_1^c,T_1^x)(T_2^c,T_2^x)\cdots\) 有 \(S\approx T\),当且仅当

\[|S|=|T|\land (\forall i>1,(S_i^c,S_i^x)=(T_i^c,T_i^x))\land S_1^c=T_1^c\land S_1^x\le T_1^x.
\]

其实这个 "\(\approx\)" 选得不好,烦请注意 \(\approx\) 没有反身性。此后,对于二元组串 \(S\),定义 \(\operatorname{next}(i)\) 为最大的 \(j\),满足

\[S[:j]\approx S[i-j+1:i].
\]

先不考虑复杂度,这个 \(\operatorname{next}\) 是能够通过正常 KMP 求出来的。接着思考已知 \(\operatorname{next}\) 时如何求最后一个二元组内部的 border 贡献。显然,沿着 \(|S|-1\) 一路跳 \(\operatorname{next}\),维护最后一个二元组已经有多长的前缀找到了 border,考虑当前跳到的位置 \(i\) 的下一个二元组 \(S_{i+1}\) 能否使更长的前缀找到 border,若能,有多长的前缀找到 border,即可计算答案。

  现在的唯一问题是复杂度。我们去思考该定义下的 \(\operatorname{next}\) 能否用 定理2.(1) 加速跳跃过程。答案是《能但不完全能》。举个例子

看图,此时 \(S=GH\) 的最长 "border" 为 \(AB\),\(|AB|\ge\frac{|S|}{2}\),\(AB\approx CD\),故第一个二元组 \(|AE|\le|CF|\)。我们只知道,第一个二元组 \(CF\) 在 \(S\) 中点左侧,它无法构成严格等于的周期。因此,我们只能断言通过周期跳跃,着陆在 \(\frac{|S|}{2}\) 之后的某个位置是安全的。当然,这一限制可以收紧,但已经能够保证复杂度。最终复杂度即为 \(\mathcal O(n\log n)\)。


  「WC 2016」「洛谷 P4156」论战捆竹竿

  对于竹竿长度 \(x\),初始有 \(x=n\),每次操作可以令 \(x\) 加上 \(n-b\),其中 \(b\) 为 \(S\) 的任意 border,问最终 \([1,W]\) 内有多少可取的 \(x\)。可以发现,这是一个同余最短路模型。

  但要小心,如果我们直接开始“优化建图”,很可能忽略原本显而易见的性质。套一般性模板的代价自然是失去特殊性。所以暂时别去想“跑最短路”,只是思考如何求到在某个有意义的模数 \(m\) 下,最小的使得 \(x\equiv r\pmod m,~r=0..m-1\) 的 \(x:=d_m(r)\) 的值。

  联系已有结论,感觉等差数列在同余意义下会带来特殊性,所以想到先用 定理 3 拆出等差数列。设 \(x,x+d,\cdots,x+kd\) 均为 \(n-\text{border}\) 的值(注意不是 border 的值),把初始的 \(x\) 作为模数模掉,按照 \(d\) 在模 \(x\) 意义下划分出的 \(\gcd(x,d)\) 个环,用 \(+d,+2d,\cdots,+kd\) 来更新同一个环上的 \(d_x(r)\),注意到边带正权,所以初始最小的 \(d_x(p)\) 不会被更新,可以使用单调队列优化。

  然而这种想法导向另一个问题:我们需要实现不同模数下 \(d\) 的转化。考虑 \(d_x(r)\) 的意义:\(d_x(r)+kx~(k\in\mathbb N)\) 都能取到,转化到 \(d_y\) 下,即 \((d_x(r)\bmod y)+k(x\bmod y)~(k\in\mathbb N)\) 都能取到。那么初始有 \(d_y(d_x(r)\bmod y)=d_x(r)\),再用 \(+k(x\bmod y)\) 在 \(d_y\) 之间互相转移。由于 \(k\) 没有上限,不需要单调队列。

  综上,我们虽然用同余最短路描述了问题,但仍紧贴 border 的性质完成转化。最终复杂度 \(\mathcal O(Tn\log n)\)。


  最重要的结论:字符串题多画图√

Solution Set - Border Theory的更多相关文章

  1. Border Theory

    持续更新中!!!更个屁,无线停更! 前言: KMP 学傻了,看 skyh 说啥 border 树,跑来学 border 理论 洛谷云剪切板:https://www.luogu.com.cn/paste ...

  2. How do I learn mathematics for machine learning?

    https://www.quora.com/How-do-I-learn-mathematics-for-machine-learning   How do I learn mathematics f ...

  3. HTML5 Differences from HTML4

    Abstract "HTML5 Differences from HTML4" describes the differences of the HTML5 specificati ...

  4. 模板库 ~ Template library

    TOC 建议使用 Ctrl+F 搜索 . 目录 小工具 / C++ Tricks NOI Linux 1.0 快速读入 / 快速输出 简易小工具 无序映射器 简易调试器 文件 IO 位运算 Smart ...

  5. [Mathematics][MIT 18.03] Proof of a Theory about the Solution to Second-order Linear Homogeneous Differential Equation

    At first, I'd like to say thank you to MIT open courses which give me the privilege to enjoy the mos ...

  6. Solution -「Gym 102956F」Border Similarity Undertaking

    \(\mathcal{Description}\)   Link.   给定一张 \(n\times m\) 的表格,每个格子上写有一个小写字母.求其中长宽至少为 \(2\),且边界格子上字母相同的矩 ...

  7. MySQL高可用解决方案(MySQL HA Solution)

    http://blog.sina.com.cn/s/blog_7e89c3f501012vtr.html 什么是高可用性?很多公司的服务都是24小时*365天不间断的.比如Call Center.这就 ...

  8. HDU 5351 MZL's Border (规律,大数)

    [HDU 5351 MZL's Border]题意 定义字符串$f_1=b,f_2=a,f_i=f_{i-1}f_{i-2}$. 对$f_n$的长度为$m$的前缀$s$, 求最大的$k$满足$s[1] ...

  9. hdu5351 MZL's Border(规律题,java)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud MZL's Border Time Limit: 2000/1000 MS (Ja ...

随机推荐

  1. c# - 数据类型转换和控制台输入

    1.使用c#自带的 Convert类转换数据类型 2.源码 using System; namespace ConsoleApp1.toValue { class excutejiecheng { s ...

  2. 实验 6 :OpenDaylight 实验——OpenDaylight 及 Postman实现流表下发

    实验 6 :OpenDaylight 实验--OpenDaylight 及 Postman实现流表下发 一.实验目的 熟悉 Postman 的使用:熟悉如何使用 OpenDaylight 通过 Pos ...

  3. JSP页面实际上就是Servlet

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513069824690618883/ 前面一直提到了Servlet的内容,也是我们平时理解的后台,这次说一下前台的 ...

  4. HDU分拆素数和

    https://acm.hdu.edu.cn/showproblem.php?pid=2098 时间复杂度 #include<bits/stdc++.h> using namespace ...

  5. 简单的Dos 命令

    1.1.如何操作DOS命令 开始---运行---输入cmd--回车 或者 Win + R ---运行---输入cmd--回车 1.2.基本命令 1. 命令:color f0 帮助:color ? 作用 ...

  6. JVM调优工具锦囊

    Arthas线上 分析诊断调优工具 以前我们要排查线上问题,通常使用的是jdk自带的调优工具和命令.最常见的就是dump线上日志,然后下载到本地,导入到jvisualvm工具中.这样操作有诸多不变,现 ...

  7. Kube-OVN 1.2.0发布,携手社区成员打造高性能容器网络

    Kube-OVN 1.2.0 新版本如期而至,支持 Vlan 和 OVS-DPDK 两种类型的高性能网络接口.本次发布得益于社区的壮大,感谢Intel爱尔兰开发团队与锐捷网络开发团队持续积极参与Kub ...

  8. 深度学习之BP算法

    1.介绍 人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是在现代生物学研究人脑组织所取得成果的基础上提出来的.人工神经网络是大脑生物结构的数学建模,有 ...

  9. HDC2021技术分论坛:组件通信、硬件池化,这些创新技术你get了吗?

    作者:ligang 华为分布式硬件技术专家,sunbinxin 华为应用框架技术专家 HarmonyOS是一款全新的分布式操作系统,为开发者提供了元能力框架.事件通知.分布式硬件等分布式技术,使能开发 ...

  10. [MRCTF2020]Ezaudit

    [MRCTF2020]Ezaudit 知识点 1.源码泄露 2.伪随机数 3.sql注入? 题解 打开题目是个漂亮的前端,扫一下发现www.zip文件泄露,下载审计 <?php header(' ...