点此看题面 大致题意: 每次在字符串后面加入或删除一个字符,求本质不同的子串个数. 后缀自动机 先说明,此题后缀自动机的确能过. 但我的后缀自动机比较弱,遇上一个较强的\(Hack\)数据就被卡掉了...(可见这场比赛的\(T1\):[HHHOJ]ZJOI2019模拟赛(十三)03.10) 尽管如此,还是讲一下大致思路吧. 更新答案 考虑后缀自动机求解本质不同的子串个数时,我们需要统计\(Len_x-Len_{fa_x}\). 所以我们可以简单定义一个\(F5\)函数来刷新答案: #define…
比较考验对后缀自动机构建过程的理解. 之前看题解写的都是树链的并,但是想了想好像可以直接撤销,复杂度是线性的. 自己想出来的,感觉后缀自动机的题应该不太能难倒我~ 注意:一定要手画一下后缀自动机的构建过程,然后看着自己画的图一步一步模拟即可. Code: #include <stack> #include <cstdio> #include <cstring> #include <algorithm> #define N 200003 #define ll…
题意: 给出两个字符串a,b,求一个字符串,这个字符串是a和b的子串, 且只在a,b中出现一次,要求输出这个字符串的最小长度. 题解: 将a串放入后缀自动机中,然后记录一下每个节点对应的子串出现的次数 然后把b串取自动机中匹配 然后判断一下 #include <set> #include <map> #include <stack> #include <queue> #include <cmath> #include <ctime>…
刷刷水~ Code: #include <cstdio> #include <cstring> #include <algorithm> #define N 200005 #define setIO(s) freopen(s".in","r",stdin) using namespace std; char str1[N],str2[N]; int tot,last,n,c[N<<1],rk[N<<1];…
题目描述 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方块放到最右边. 他们想,在仅这一个操作下,最漂亮的工艺品能多漂亮. 两个工艺品美观的比较方法是,从头开始比较,如果第i个位置上方块不一样那么谁的瑕疵度小,那么谁就更漂亮,如果一样那么继续比较第i+1个方块.如果全都一样,那么这两个工艺品就一样漂亮. 输入 第一行两个整数n,代表方块的数目. 第二行n…
题目描述 你有一个字符串S,一开始为空串,要求支持两种操作 在S后面加入字母C 删除S最后一个字母 问每次操作后S有多少个两两不同的连续子串 输入 一行一个字符串Q,表示对S的操作 如果第i个字母是小写字母c,表示第一种加字母c的操作 如果为-表示删除操作,保证所有删除操作前S都非空 |Q|<=10^5 输出 输出|Q|行,第i行表示i个操作之后S内有多少个不同子串 样例输入 aba-caba 样例输出 135 3 6 91217 题解 广义后缀自动机+树链的并+STL-set 题目给出的字符串…
“写sam是肯定会去写的,这样才学的了字符串,后缀数组又不会用 >ω<, sam套上数据结构的感觉就像回家一样! 里面又能剖分又能线段树合并,调试又好调,我爱死这种写法了 !qwq” SAM是一个DFA,它存储了某字符串的所有子串信息. 待更. 博主水平不行,尽量在退役前多更些. 插入字符: void extend(int id,int&now) { int p=now; ) { now=ch[p][id]; return; } int np=++tot; len[np]=len[p]…
*在学习后缀自动机之前需要熟练掌握WA自动机.RE自动机与TLE自动机* 什么是后缀自动机 后缀自动机 Suffix Automaton (SAM) 是一个用 O(n) 的复杂度构造,能够接受一个字符串所有后缀的自动机. 它最早在陈立杰的 2012 年 noi 冬令营讲稿中提到. 在2013年的一场多校联合训练中,陈立杰出的 hdu 4622 可以用 SAM 轻松水过,由此 SAM 流行了起来. 一般来说,能用后缀自动机解决的问题都可以用后缀数组解决.但是后缀自动机也拥有自己的优点. 1812.…
比赛的时候我是用后缀数组的,但是T了. 赛后看了解题报告说,后缀数组貌似是卡你常数的时间,我算了下复杂度O(T * Q * n).这是10 ^ 8,但是考虑到每次询问的时候都要重新构造字符,所以那个n可能是(3 - 4 ) * n,卡的可能就是这个常数.然后就过不了了. 我先上一发我的后缀数组的代码,T的好惨. 因为当时不会后缀自动机. #include<iostream> #include<string> #include<cstring> #include<a…
题目1 BZOJ 3676 APIO2014 回文串 算法讨论: cnt表示回文自动机上每个结点回文串出现的次数.这是回文自动机的定义考查题. #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; ; + ; typedef long long ll; char st…