爱字符串的好孩子
文章平均质量分 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 · 1256 阅读 · 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 · 2169 阅读 · 0 评论 -
省选专练(学习)AC自动机
我好菜啊AC自动机都不会AC自动机可以干什么:用一个模板串匹配多个子串。这便让AC自动机可以干许多KMP和Tri树不能干的事。AC自动机的构造首先建立一颗Trie树。其次利用KMP的思想(Trie树上明显有许多重复的子路径)建立一条Fail边使得这些子路径没有白跑。#include<bits/stdc++.h>using namespace ...原创 2018-07-19 07:50:12 · 241 阅读 · 1 评论 -
省选专练 [TJOI2013]单词
傻逼出题人没说单词可以重复但是还是好写你就不用把end那里每次修改查的时候n^2找到第一个和他相同的就行了而且使用AC自动机做这个题有一个小trick:我们的模板串需要拼合但是良心的样例告诉我们不能直接拼合,所以我们增大一个字符集,然后拼合的时候加入一个“{”(这是‘a’+26)。然后AC——AUTOMATION 完#include<bits/stdc+...原创 2018-07-19 07:58:43 · 132 阅读 · 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 · 283 阅读 · 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 · 153 阅读 · 0 评论 -
省选专练之后缀自动机 [TJOI2015]弦论
这个看似模板,但是我还是没有理解透彻,毕竟写得慢还是主要比不过抄码的人。但是在ZJY巨子本色出演的题目,我还是请教了ZJY本人,我大抵是会了。这个本身有两种情况1)t=0求right集合(又叫endpos集合)2)t=1求siz集合这个都好求然后就是一个类似于可持久化线段树的查询方式了从小到大暴力减减到0或负数就退出#include<iostream...原创 2018-08-14 21:08:12 · 125 阅读 · 0 评论 -
省选专练之后缀自动机[HAOI2016]找相同字符
因为我太菜了,我写了LCS就忘了(温故而知新的重要性啊)和LCS代码几乎一样又一个算贡献的问题now->pre的贡献为siz*(now->step-pre->step)这个时候可以预处理但是当前匹配串长度并不一定是now->step这很重要#include<iostream>#include<cstdio>#in...原创 2018-08-14 21:28:54 · 132 阅读 · 0 评论 -
省选专练之后缀自动机APIO2014回文串
本来是个回文自动机模板题但是也可以用后缀自动机AC掉先跑manacher这可以识别所有的回文串然后放进自动机里暴力跑就是了#include<iostream>#include<cstdio>#include<cmath> #include<algorithm>#include<cstring>using...原创 2018-08-15 21:44:23 · 162 阅读 · 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 · 154 阅读 · 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 · 178 阅读 · 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 · 139 阅读 · 0 评论 -
省选专练之后缀自动机hihocoder1445
求本质不同的字符串个数两种方法:1)求right集合大小,暨parent树上一个点子树的大小,这是一个递推式,并不是指点的个数2)由step函数求因为now->step - pre->step 表示一条边的贡献,所以全部加起来就好了本题使用法2#include<iostream>#include<cstdio>#include<...原创 2018-08-14 20:50:57 · 235 阅读 · 0 评论 -
省选专练之后缀自动机HiHocoder1449
似乎是个SPOJ的题明显建立后缀自动机给每个np节点附上1的权重然后利用top序把所有pre更新了然后每一个暴力比较就好了而且网上的题解又一句废话就是从大到小更新一遍不可能出现长串多余短串的#include<iostream>#include<cstdio>#include<cmath>#include<cstrin...原创 2018-08-14 20:58:36 · 163 阅读 · 0 评论 -
省选专练之后缀自动机Hihocoder1457
伪广义后缀自动机利用SA的著名做法加个字符集以外的串然后把串连接起来选择':'('0'+10)然后所有parent树上不经过:边的串都是合法的然后这里是要从短串转移到长串基数排序了之后从1-siz暴力转移#include<iostream>#include<cstdio>#include<cmath>#include<c...原创 2018-08-14 21:02:07 · 157 阅读 · 0 评论 -
省选专练之后缀数组hihocoder1415
按照Kiana的说法这个是考察了后缀数组的第一个主要用途:把height数组merge起来然后二分一个长度因为不可重叠所以判断SAmax-SAmin是否不小于当前长度就好了#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<...原创 2018-08-27 08:50:04 · 127 阅读 · 0 评论