字符串
ShɑΙteж
think twice,code once
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【SPOJSUBST1 NewDistinctSubstrings】后缀数组
SPOJ-SUBST1 New Distinct Substrings题目大意求出一个字符串中本质不同的子串个数 n<=5e4分析用所有的子串个数减去重复的子串个数即可 所有的子串个数是n*(n+1)/2,重复的个数就是(画个图就明白了)Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a...原创 2019-01-10 15:33:35 · 247 阅读 · 0 评论 -
字符串
KMP Manacher 后缀数组 AC自动机 后缀自动机 回文自动机原创 2019-01-15 21:37:37 · 272 阅读 · 0 评论 -
后缀自动机
基本概念 原理&实现void insert(int c){ int p=tmp,x=++n,q; tmp=n,maxn[x]=maxn[p]+1; while(p&&!to[p][c])to[p][c]=x,p=pre[p]; if(!p){pre[x]=1;return;} if(maxn[q=to[p][c]]==maxn[p]+1)pre[x]=q; ...原创 2019-02-02 08:37:37 · 228 阅读 · 0 评论 -
[hihocoder1449] 后缀自动机
[hihocoder1449]Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)using namespace std;const int N=2e6+100;struct n...原创 2019-02-02 08:41:13 · 316 阅读 · 0 评论 -
[hihocoder1457] 后缀自动机+拓扑排序
[hihocoder1457]一个一个找显然会T飞 考虑增量法,如何利用上一次的信息 sum(x)表示在DAG上以x结尾的所有串的答案,tot(x)表示在DAG上以x结尾的串有tot(x)个 sum(to[x][c])=\sum sum(x)*10+tot(x)*c 按照Topsort计算即可Code#include<bits/stdc++.h>#define r...原创 2019-02-02 11:16:15 · 361 阅读 · 0 评论 -
[hihocoder1465] 后缀自动机
[hihocoder1465]题目描述给定一个字符串S和若干个字符串T,求T的所有循环同构串在S中的出现次数 例如abcd的循环同构串为{abcd,bcda,cdab,dabc}解题方法提示Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(...原创 2019-02-02 15:55:06 · 298 阅读 · 0 评论 -
[BZOJ3261]最大异或和 可持久化tire树
[BZOJ3261]tire树相关 由于可能出现查询越界的情况,所以开始时要把初始数组整体向右移动一位Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);++i)#define per(i,a,b) for(int i=(a);i>=(b);--i)using namesp...原创 2019-02-27 17:56:41 · 368 阅读 · 0 评论 -
[TJOI2015]弦论 后缀自动机+贪心
[TJOI2015]考虑后缀自动机每个节点的意义以及endpos 从后往前考虑从该点出发能到达几个子串 最后在后缀自动机上贪心输出即可#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)u...原创 2019-03-03 20:06:01 · 200 阅读 · 0 评论 -
[ZROI620]con 后缀自动机
[ZROI620]n,Q<=5000 打死我也不写后缀数组#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--) #define ll long longusing namespa...原创 2019-03-11 07:09:29 · 296 阅读 · 0 评论 -
【POJ2774】后缀数组
【POJ2774】题目大意给定两个字符串a,b求它们的最长公共字串 len(a),len(b) <= 1e5 分析构造一个串s,s=a+'$'+b,这样可以保证s的后缀的LCP不会跨过a,b 那么公共字串就转化成了s的后缀的LCP 可以发现后缀排名离得越近的LCP就越长,那么答案就产生在height数组中 求出s的height[]和sa[] 答案就是MAX{ he...原创 2019-01-10 11:27:35 · 271 阅读 · 0 评论 -
Suffix Array【后缀数组】
算法介绍后缀数组是用来解决⼀类字符串问题的⼯具 算法目标是计算出字符串的每个后缀的排名 几个要用到的定义 n : 字符串的长度 sz : 字符集 s :字符串,方便起见,我们从0开始标号,即 s[0]~s[n-1] suf[i] : 下标从i开始的后缀 rk[i] : 以 s[i] 开头的后缀的排名为rk[i] sa[i] :...原创 2019-01-09 21:34:50 · 667 阅读 · 0 评论 -
【POJ3261】后缀数组+二分答案
【POJ3261】题目大意给出⼀个长度为n的串,字符集大小为10^6。计算出现了至少k次的最长子串长度 n<=2*10^4 , 2<=k<=n分析二分答案 将height<=mid的位置断开,判断是否存在⼀个长度k的连续的段即可Code#include<iostream>#include<cstdio>#include&...原创 2019-01-10 17:06:42 · 217 阅读 · 0 评论 -
Manacher Algorithm
Manacher算法介绍Manacher算法是查找一个字符串的最长回文子串的线性算法。 在介绍算法之前,首先介绍一下什么是回文串,所谓回文串,简单来说就是正着读和反着读都是一样的字符串,比如abba,noon等等,一个字符串的最长回文子串即为这个字符串的子串中,是回文串的最长的那个。 计算字符串的最长回文字串最简单的算法就是枚举该字符串的每一个子串,并且判断这个子串是否为回文串,这个算法的...原创 2019-01-06 20:12:40 · 270 阅读 · 0 评论 -
KMP Algorithm
该算法可以在O(n)时间复杂度内判断出字符串A是否在字符串B中出现过A的自我匹配next[1]=0; for(int i=2,j=0;i<=n;i++){ while(j&&a[i]!=a[j+1])j=next[j]; if(a[i]==a[j+1])j++; next[i]=j; } A在B上的匹配for(int i=1,j=0;i&...原创 2019-01-06 20:35:16 · 228 阅读 · 0 评论 -
【模板】AC自动机(简单版)
题目Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++) using namespace std;const int N=2e6;int endpos[N],tr[N][30],fail[N],ans,tot,m,n;char a[N],s[N];inline void...原创 2019-01-08 08:46:23 · 257 阅读 · 0 评论 -
【模板】AC自动机(加强版)
题目Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int N=2e4;int tr[N][26],pos[N],fail[N],tot,T,n;char a[N/100][N/100],s[N*201];ve...原创 2019-01-08 08:48:55 · 210 阅读 · 0 评论 -
AC自动机
算法介绍在KMP 算法当中,我们的模式串只能有一个 如果我们想要对多个模式串进行匹配的话,除了一个个枚举匹配之外,我们希望有更高效的算法来充分利用字符串间的联系,加速运算 AC自动机建立在 trie 结构的基础之上,同样是通过从根节点到某个节点的路径来表示一个字符串 我们在 trie 中查询某个字符串是否存在时,一般是从根往下走一遍。 但当我们进行匹配(查询)的串比较长时,往往会发生失配...原创 2019-01-08 08:50:04 · 196 阅读 · 0 评论 -
【HDU2825】AC自动机+状压DP
HDU2825题目大意 给定原创 2019-01-08 14:32:42 · 244 阅读 · 0 评论 -
【NOI2011】阿狸的打字机
luoguP2414题目大意你需要支持下面几种操作 在字符串尾部插入一个字符 在字符串尾部删除一个字符 将字符串整个输出 询问第原创 2019-01-08 20:19:46 · 377 阅读 · 0 评论 -
[ARG] KMP
n,m,C<=1e6 只要两个串中的字符相对位置一样两个串就可以匹配 所以我们可以把原串每个字符改成他和他上次出现位置的距离 做KMP即可#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int N=1e6+100;...原创 2019-03-19 20:30:28 · 235 阅读 · 0 评论
分享