字符串基本算法
_Shmily
这个作者很懒,什么都没留下…
展开
-
ICM Technex 2018 and Codeforces Round #463-- G、Palindrome Partition(回文自动机)
题目链接题面:题意:给定一个字符串,把字符串分为偶数段,假设分为了kkk段,那么需要满足s1=sk,s2=sk−1...s_1=s_k,s2=s_{k-1}...s1=sk,s2=sk−1...。求符合要求的划分的方案数。题解:我们假设原串为SSS,长度为nnn假设现在有两段si,sk−i+1s_i,s_{k-i+1}si,sk−i+1,其中si=sk−i+1=x1x2...xjs_i=s_{k-i+1}=x_1x_2...x_jsi=sk−i+1=x1x2...xj。原创 2020-08-25 09:21:08 · 129 阅读 · 0 评论 -
可持久化Trie(可持久化字典树):
构建可持久化Trie所需的空间和时间复杂度都是字符串的总长度的线性函数。比例系数为字符集大小。例题:AcWing 256. 最大异或和:给定一个非负整数序列 a,初始长度为 N。有 M 个操作,有以下两种操作类型:1、”A x”:添加操作,表示在序列末尾添加一个数 x,序列的长度 N 增大1。2、”Q l r x”:询问操作,你需要找到一个位置 p,满足l≤p≤r,使得:a[p] xo...原创 2020-08-24 20:55:12 · 228 阅读 · 1 评论 -
2020 Multi-University Training Contest 1---- HDU--6761、Minimum Index(Lyndon 分解)
题目链接题面:题意:给定一个字符串求 ∑i=1npi∗1112i−1\sum_{i=1}^np_i*1112^{i-1}∑i=1npi∗1112i−1其中,pip_ipi 是字符串 S 的前缀 SiS_iSi 的所有后缀的最小后缀的位置。题解:考虑Lyndon 分解过程。Lyndon 分解:读入一个字符串S,把这个字符串分解成若干部分S=S1S2...SkS=S_1S_2...S_kS=S1S2...Sk其中每一个SiS_iSi都是Lyndon串,且有Si>=Si+原创 2020-08-25 08:56:56 · 122 阅读 · 0 评论 -
2020牛客暑期多校训练营(第一场)F、Infinite String Comparision (Periodicity Lemma)
题目链接题面:题意:给定两个串a,b。比较这两个串的无限循环的字典序大小。题解:Weak Periodicity Lemmap 和 q 是字符串 s 的周期, p + q ≤ ∣ s ∣ , 则 gcd(p,q) 也是s的周期。Periodicity Lemmap 和 q 是字符串 s 的周期,p+q−gcd(p,q)≤∣s∣ , 则gcd(p,q) 也是 s 的周期。没看出来和这俩定理有啥关系。。。。但是直觉告诉我,上来莽2*max.代码:#include<iostrea原创 2020-08-25 08:43:01 · 120 阅读 · 0 评论 -
P3728 曼哈顿序列 (序列自动机找第k小子序列)
题目连接题面:#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<vector>#define ll long long#define llu unsigned ll//#define int llusing namespace std;const int maxn=10010原创 2020-08-24 22:26:57 · 274 阅读 · 0 评论 -
P3375 【模板】KMP字符串匹配
题目连接题面:代码:#include<iostream>#include<cstdlib>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<queue>#include<map>#include<vector>#define ll原创 2020-08-24 22:26:08 · 75 阅读 · 0 评论 -
P3370 【模板】字符串哈希
题目连接题面:代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<queue>#include<set>#define ll long long#define llu unsigned llusing namesp原创 2020-08-24 22:26:00 · 69 阅读 · 0 评论 -
P3805 【模板】manacher算法
题目连接题面:代码:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<algorithm>#define ll long longusing namespace std;const int maxn=22000100;char s原创 2020-08-24 22:25:00 · 71 阅读 · 0 评论 -
P5496 【模板】回文自动机(PAM)
题目连接题面:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#include<algorithm>#define ll long longusing namespace std;const int maxn=500010;const int N=原创 2020-08-24 22:21:47 · 69 阅读 · 0 评论 -
#523. 【美团杯2020】半前缀计数 ——后缀平衡树\后缀自动机
#523. 【美团杯2020】半前缀计数设给定的字符串为s,我们假设 [ 1 , i ] ,[ i, k ] 组成了一个字符串a,为了避免重复计算,我们考虑这个字符串a最后出现是在什么时候。[ 1 , i ] ,[ i, k ] 组成的字符串a当前是最后一次出现,当且仅当 s [ i + 1 ] != s [ j ]。得到算法:枚举 i ,计算 [ i + 1 ,len] 中有多少个本质不同的子串且开头不是 s [ i + 1 ]。这样计算完之后,发现少算了 s [ 1 , 0 ] ,原创 2020-08-24 21:59:30 · 100 阅读 · 0 评论 -
后缀平衡树
一、P6164 【模板】后缀平衡树题解:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#include<cmath>#include<queue>#incl原创 2020-08-24 21:53:21 · 351 阅读 · 0 评论 -
P6114 【模板】Lyndon 分解
题目链接题解:#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<vector>#include<map>#include<set>#inclu...原创 2020-08-24 21:50:57 · 95 阅读 · 0 评论 -
P6139 【模板】广义后缀自动机(广义SAM)
纯粹一个模板题。不过我发现我广义后缀自动机竟然没写笔记,太奇怪了。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<vector>#include<cstdlib>...原创 2020-08-24 21:41:12 · 119 阅读 · 0 评论 -
P5410 【模板】扩展 KMP(Z 函数)
裸的扩展kmp。我的ex-kmp数组下标从0开始,用的时候处理一下就好了。#include <iostream>#include <string>#include <cstdio>#include <cstring>#define ll long longusing namespace std;const int maxn = 200...原创 2020-08-24 21:39:54 · 90 阅读 · 0 评论 -
P1368 工艺 /【模板】最小表示法
题目描述小敏和小燕是一对好朋友。他们正在玩一种神奇的游戏,叫Minecraft。他们现在要做一个由方块构成的长条工艺品。但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方块放到最右边。他们想,在仅这一个操作下,最漂亮的工艺品能多漂亮。两个工艺品美观的比较方法是,从头开始比较,如果第i个位置上方块不一样那么谁的瑕疵度小,那么谁就更漂亮,如果一样那么继续比较第i+1个...原创 2020-08-24 21:36:55 · 74 阅读 · 0 评论 -
P5829 【模板】失配树
一看就知道这题目不好复制建出失配指针 nt [ i ] 的那棵树,然后倍增,注意lca(p,q)是p,q之一的情况。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<string&g...原创 2020-08-24 21:35:21 · 67 阅读 · 0 评论 -
P5826 【模板】子序列自动机
判断一个序列是不是另一个序列的子序列。本题有两种解法:①、直接用vector二分O(n + m logn)。②、用主席树维护序列自动机(n logn + m logn)。①、#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include&l...原创 2020-08-24 21:31:00 · 145 阅读 · 0 评论 -
广义后缀自动机:
在搞广义后缀自动机之前,先做一个后缀自动机的题目,练练手。好吧。又忘了%mmh学长了。wa了好久。%mmh①:Cool Slogans CodeForces - 700E:Bomboslav set up a branding agency and now helps companies to create new logos and advertising slogans. In ter...原创 2020-08-24 21:18:09 · 230 阅读 · 0 评论 -
序列自动机:
例题:牛客:月月查华华的手机题目描述月月和华华一起去吃饭了。期间华华有事出去了一会儿,没有带手机。月月出于人类最单纯的好奇心,打开了华华的手机。哇,她看到了一片的QQ推荐好友,似乎华华还没有浏览过。月月顿时醋意大发,出于对好朋友的关心,为了避免华华浪费太多时间和其他网友聊天,她要删掉一些推荐好友。但是为了不让华华发现,产生猜疑,破坏了他们的友情,月月决定只删华华有可能搭讪的推荐好友。月月熟...原创 2020-08-24 21:17:59 · 143 阅读 · 0 评论 -
最小表示法
一、最小表示法: 给定一个字符串S(1----N),如果我们不断把它的最后一个字符放到开头,最终会得到n个字符串,称这n个字符串是循环同构的。这些字符串中字典序最小的一个,称为字符串S的最小表示。 t...原创 2020-08-24 18:25:44 · 1968 阅读 · 0 评论 -
EX—KMP
理解什么的都不重要了,背就完事了。原创 2020-08-24 18:26:26 · 193 阅读 · 0 评论 -
Manacher—马拉车
一、基本:线性时间求最长回文子串。最长回文子串的长度为半径-1。最长子串的长度是半径减1,起始位置是中间位置减去半径再除以2。HDU----3068 最长回文:给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等Input输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c…y,z...原创 2020-08-24 18:26:47 · 148 阅读 · 0 评论 -
AC自动机
一、基本:当我们遍历到 某个 节点的时候,由于存在这个节点,我们就让他的fail指针 指向 他父亲节点的fail指针指向的那个节点的具有相同字母的子节点。简单来说,AC自动机是用来进行多模式匹配(单个主串,多个模式串)的高效算法。使用Aho-Corasick算法需要三步:建立模式串的Trie给Trie添加失败路径根据AC自动机,搜索待处理的文本例题:Keywords Search H...原创 2020-08-24 18:27:06 · 164 阅读 · 0 评论 -
回文自动机(回文树)
一、不挣扎了,直接背。 首先,回文树有何功能?假设我们有一个串S,S下标从0开始,则回文树能做到如下几点:1.求串S前缀0~i内本质不同回文串的个数(两个串长度不同或者长度相同且至少有一个字符不同便是本质不同)2.求串S内每一个本质不同回文串出现的次数3.求串S内回文串的个数(其实就是1和2结合起来)4.求以下标i结尾的回文串的个数 ...原创 2020-08-24 18:27:27 · 669 阅读 · 0 评论 -
Trie(字典树)
一、基本概念: Trie(字典树)是一种用于实现字符串快速检索的多叉树结构。Tire的每个节点都拥有若干个字符指针,若在插入或检索字符串时扫描到一个字符c,就沿着当前节点的c字符指针,走向该指针指向的节点。 初始化: 一棵空Trie仅包含一个根节点,该点的字符指针均指向空。 插入: 当需要插入一个字符串S时,我们令一个...原创 2020-08-24 18:22:23 · 242 阅读 · 0 评论 -
后缀数组:
一、模板:①倍增nlogn:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<vector>#define ll long longusing namespace std...原创 2020-08-24 20:45:06 · 122 阅读 · 1 评论 -
Hash——字符串映射
一、nlogn求最长回文串POJ3974#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<cstring>#include<cmath>#include<map>#define ll long ...原创 2020-08-24 20:44:54 · 372 阅读 · 0 评论 -
后缀自动机:
一、模板:洛谷P3804#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<vector>#define ll long long#define llu unsigned l...原创 2020-08-24 20:45:55 · 248 阅读 · 2 评论 -
KMP
一、KMP:时间复杂度O(N+M)。哪有那么多事情,板子背就完了。next数组求法:(1)初始化next(1)= j = 0,假设next(1----i-1)已经求出,下面求解next(i)。(2)不断尝试扩展匹配长度j,如果扩展失败(下一个字符不相等),令 j 变为next(j),直至 j 为0(应该开始从头开始匹配)。(3)如果能够扩展成,匹配长度 j 就增加1。next(i)的值...原创 2020-08-24 18:24:22 · 215 阅读 · 0 评论