爱字符串的好孩子
文章平均质量分 52
字符串NOI年年都考啊
好重要的
LauZiyang
exploring
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
和Leo一起做爱字符串/线段树的好孩子CF700E Cool Slogans
这道题愈发加深了我对right集合的理解 也就是endpos集合 endpos集合是指一些可以以这个点结尾的合法集合 而维护使用经典的主席树 按照Parent树从上向下进行树形DP 使用主席树按top序合并pos集合 由于树上路径一定是当前的一个后缀所以必然出现了至少一次 这个时候查询posA-lenA+lenB,posB-1是否存在一个节点 #include<iost...原创 2018-09-07 22:34:56 · 1467 阅读 · 0 评论 -
和Leo一起做爱字符串/线段树的好孩子「TJOI / HEOI2016」字符串
终于做完佳媛姐姐系列 后缀数组+RMQ+主席树 本题求的是两段子串中的LCS 当然LCS是可以用LCP求的 首先建立SA 得到a,b,c,d求出rk-c 二分LCS设查询mid 由于求两个串的LCP是求rk1-rk2的min 建立ST表 利用RMQ查出rkc所能覆盖的区间L,R 这个时候很明显出现在L-R就是合法的 那么易得区间版本查询 建立主席树查询节点即可 #i...原创 2018-09-06 21:56:17 · 2246 阅读 · 0 评论 -
省选专练(学习)AC自动机
我好菜啊 AC自动机都不会 AC自动机可以干什么: 用一个模板串匹配多个子串。 这便让AC自动机可以干许多KMP和Tri树不能干的事。 AC自动机的构造 首先建立一颗Trie树。 其次利用KMP的思想(Trie树上明显有许多重复的子路径) 建立一条Fail边 使得这些子路径没有白跑。 #include<bits/stdc++.h> using namespace ...原创 2018-07-19 07:50:12 · 319 阅读 · 1 评论 -
省选专练 [TJOI2013]单词
傻逼出题人没说单词可以重复 但是还是好写 你就不用把end那里每次修改 查的时候n^2找到第一个和他相同的就行了 而且使用AC自动机做这个题有一个小trick: 我们的模板串需要拼合 但是良心的样例告诉我们不能直接拼合,所以我们增大一个字符集,然后拼合的时候加入一个“{”(这是‘a’+26)。 然后AC——AUTOMATION 完 #include<bits/stdc+...原创 2018-07-19 07:58:43 · 196 阅读 · 0 评论 -
省选专练(学习)后缀自动机SAM(超详细)
This is a SAM for string acadd 先谈我对后缀自动机的理解: 误解1:后缀自动机是识别字符串所有后缀的东西 这不完全正确,它可以识别所有子串,于是也可以识别所有后缀 误解2:这是一个nlogn的算法。 错误后缀自动机极限时间复杂度是O(n*2-1)比SA和S tree优 然后是后缀自动机可以干什么: 可以求LCS 什么?你说把他转成LIS跑nlogn...原创 2018-07-21 07:56:34 · 374 阅读 · 0 评论 -
省选专练之后缀自动机JSOI2012玄武密码
我本来是准备写个ACM再开SAM的 但是QwQ这个SAM太简单了 啥?求得是前缀做不了? 是啊我们需要前缀自动机 只要你稍微有后缀自动机基础,把串直接放进自动机暴力匹配就完了 #include<bits/stdc++.h> using namespace std; const int N=1e7+6e6; struct SAM{ int n,m; char S[N]...原创 2018-08-14 20:21:36 · 218 阅读 · 0 评论 -
省选专练之后缀自动机 [TJOI2015]弦论
这个看似模板,但是我还是没有理解透彻,毕竟写得慢还是主要比不过抄码的人。 但是在ZJY巨子本色出演的题目,我还是请教了ZJY本人,我大抵是会了。 这个本身有两种情况 1)t=0求right集合(又叫endpos集合) 2)t=1求siz集合 这个都好求 然后就是一个类似于可持久化线段树的查询方式了 从小到大暴力减 减到0或负数就退出 #include<iostream...原创 2018-08-14 21:08:12 · 166 阅读 · 0 评论 -
省选专练之后缀自动机[HAOI2016]找相同字符
因为我太菜了,我写了LCS就忘了(温故而知新的重要性啊) 和LCS代码几乎一样 又一个算贡献的问题 now->pre的贡献为siz*(now->step-pre->step) 这个时候可以预处理 但是当前匹配串长度并不一定是now->step 这很重要 #include<iostream> #include<cstdio> #in...原创 2018-08-14 21:28:54 · 194 阅读 · 0 评论 -
省选专练之后缀自动机APIO2014回文串
本来是个回文自动机模板题 但是也可以用后缀自动机AC掉 先跑manacher 这可以识别所有的回文串 然后放进自动机里暴力跑就是了 #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> using...原创 2018-08-15 21:44:23 · 204 阅读 · 0 评论 -
省选专练之后缀数组 HihoCoder-1403 后缀数组一·重复旋律
后缀数组板子题 额这个实际上考察的是height数组的应用 本质来说就是如果有一段连续为k-1的数组那么存在一个LCP满足条件 所以说构建SA并且二分答案就完了 #include<bits/stdc++.h> using namespace std; const int N=1e5+100; int S[N]={}; int c[N]={}; int x[N]={}; i...原创 2018-08-26 21:45:50 · 227 阅读 · 0 评论 -
省选专练之字符串ZOJ3228Searching the String
主要考察的是对AC自动机的理解。 首先不重复直接匹配 否则定义Last表示以此结尾的串上一次所在匹配位置 Pos表示这个字符在当前串位置 若i-Last>Pos 则这是合法解 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #inclu...原创 2018-08-13 07:32:06 · 252 阅读 · 0 评论 -
省选专练之后缀自动机SPOJ1811LCS - Longest Common Substring
陈老师引入SAM的例题 求两个串的LCS 直接建一个串的SAM,并且把另外一个串放进去跳。 这个方法很经典! 几乎满足了所有两个串的公共串问题的所有解法 有巨子说这个跳是均摊Log的,我也不知道QwQ对不对,反正SPOJ那么严苛的时间是过得了的 #include<bits/stdc++.h> using namespace std; const int N=4e5+1...原创 2018-08-14 20:26:58 · 191 阅读 · 0 评论 -
省选专练之后缀自动机hihocoder1445
求本质不同的字符串个数 两种方法: 1)求right集合大小,暨parent树上一个点子树的大小,这是一个递推式,并不是指点的个数 2)由step函数求因为now->step - pre->step 表示一条边的贡献,所以全部加起来就好了 本题使用法2 #include<iostream> #include<cstdio> #include<...原创 2018-08-14 20:50:57 · 312 阅读 · 0 评论 -
省选专练之后缀自动机HiHocoder1449
似乎是个SPOJ的题 明显建立后缀自动机 给每个np节点附上1的权重 然后利用top序把所有pre更新了 然后每一个暴力比较就好了 而且网上的题解又一句废话就是从大到小更新一遍 不可能出现长串多余短串的 #include<iostream> #include<cstdio> #include<cmath> #include<cstrin...原创 2018-08-14 20:58:36 · 238 阅读 · 0 评论 -
省选专练之后缀自动机Hihocoder1457
伪广义后缀自动机 利用SA的著名做法加个字符集以外的串然后把串连接起来 选择':'('0'+10) 然后所有parent树上不经过:边的串都是合法的 然后这里是要从短串转移到长串 基数排序了之后从1-siz暴力转移 #include<iostream> #include<cstdio> #include<cmath> #include<c...原创 2018-08-14 21:02:07 · 222 阅读 · 0 评论 -
省选专练之后缀数组hihocoder1415
按照Kiana的说法这个是考察了后缀数组的第一个主要用途:把height数组merge起来 然后二分一个长度 因为不可重叠所以判断SAmax-SAmin是否不小于当前长度就好了 #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<...原创 2018-08-27 08:50:04 · 167 阅读 · 0 评论
分享