字符串
文章平均质量分 89
C202044zxy
这个作者很懒,什么都没留下…
展开
-
[模板] 扩展KMP
一、题目点此看题二、解法这个算法虽然和 kmp\tt kmpkmp 或者是马拉车。我们先从题目要求的第一个数组入手,设 nxt[i]nxt[i]nxt[i] 为 bbb 和 bbb 的后缀 iii 的最长公共前缀。我们设 i+nxt[i]i+nxt[i]i+nxt[i] 覆盖最远的点是 ppp(这是我们以前就维护出来的),转移分两种情况讨论:情况 111 :...原创 2020-12-12 08:30:04 · 319 阅读 · 1 评论 -
[WC2016] 论战捆竹竿 && [学习笔记] 同余最短路
本来想做字符串的题,结果发现了这个坑把他填上。什么是同余最短路?同余最短路是解决这样一类问题:给你若干个数 a[i]a[i]a[i] ,每个数可以选无限次加起来,问最后的和有多少种在 mmm 的范围内,这种问题 mmm 可以开到非常大,但 a[i]a[i]a[i] 不会很大。那怎么做?是个正常人都不会去跑背包,同余最短路,顾名思义肯定要和余数有关系,我们把 a[1]a[1]a[1] 单独拎出来作为模数,设 dp[i]dp[i]dp[i] 为模 a[1]a[1]a[1] 余 iii 的最小数(是剩下的原创 2020-12-09 17:02:09 · 311 阅读 · 0 评论 -
CF825F String Compression
一、题目点此看题原创 2020-07-28 19:39:55 · 236 阅读 · 0 评论 -
CF1063F String Journey
一、题目点此看题二、解法首先我们可以确定答案是这个样子的:ans.....2,1ans.....2,1ans.....2,1,并且ansansans的值大约是n\sqrt nn级别的,并且具有单调性,可以靠虑枚举答案,如果当前不行就输出然后结束程序。假设现在要验证的答案是jjj,设f[i][j]f[i][j]f[i][j]为后缀jjj是否能够组成答案iii,我们枚举位置iii,先看f[j...原创 2020-02-29 10:16:04 · 172 阅读 · 0 评论 -
CF985F Isomorphic Strings
一、题目点此看题二、解法考虑两个字符串能够映射的条件:对于两个满足映射关系的字符,出现位置完全一样。那么我们能不能把这个出现位置hashhashhash呢?显然是可以的,我们就把在这个位置出现标记为111,未出现标记为000,就转化成了一个二进制串的hashhashhash。然后我们贪心地把两个hashhashhash值相同的字符映射,这个过程以可用multisetmultisetmult...原创 2020-02-20 10:17:06 · 197 阅读 · 0 评论 -
SP1812 LCS2
一、题目点此看题二、解法可以先把这道题写了,只有两个串,是这道题的简化版。我们先对于第一个串建出后缀自动机,然后把其他串丢进去匹配,大致方法如下(实际上第一种情况可以和第二种情况合并,减少代码量):如果当前点有转移,直接跳,长度++如果没有转移,跳父亲,看它有没有转移,在第一个有的停下,操作即可如果跳出了自动机,回到根节点,长度赋值000自动机上的每个节点存一个最大长度mxmx...原创 2020-02-04 14:13:33 · 186 阅读 · 0 评论 -
[CTSC2012]熟悉的文章
一、题目点此看题二、解法显然LLL满足单调性,可以二分。考虑检查,可以dpdpdp,设dp[i]dp[i]dp[i]为分段到iii,最多能够匹配的长度,转移如下:dp[i]={dp[i−1]dp[j]+i−j(i−mt[i]≤j≤i−L)dp[i]=\begin{cases}dp[i-1]\\dp[j]+i-j&(i-mt[i]\leq j\leq i-L)\end{cases}...原创 2020-02-04 10:58:09 · 195 阅读 · 0 评论 -
[TJOI2015]弦论
一、题目点此看题二、解法考虑后缀自动机,我们先把图建出来,然后算两个东西,第一个是每个节点所代表的串的出现次数valvalval,第二个是经过该点向所有chchch方向走得到的valvalval和,我们可以把所有节点按长度桶排,因为总是长度大的连向长度小的,扫一遍即可处理出这两个值,当t=0t=0t=0是valvalval赋值为111,否则就按出现次数来算。怎么找答案呢?就从111号点开始...原创 2020-02-03 17:33:59 · 168 阅读 · 0 评论 -
[USACO17DEC]Standing Out from the Herd
去年暑假做过,那时候只会打暴搜,被高中奆佬吊打。后缀自动机万岁,再也不管后缀数组这辣鸡东西了一、题目点此看题二、解法本题需要用到一个知识点:广义Sam\text{Sam}Sam,其实也没有多难,就是在一个新字符串插入时把LastLastLast赋值为111,然后都按普通后缀自动机的方法做就行了。插入完之后把每个串放进去匹配,对每个匹配到的点都暴力跳parentparentparent树...原创 2020-02-03 15:05:46 · 334 阅读 · 0 评论 -
[AHOI2013]差异
一、题目点此看题二、解法先对原式做一个变形:∑1≤i<j≤nTi+Tj−2×lcp(Ti,Tj)\sum_{1\leq i<j\leq n} T_i+T_j-2\times lcp(T_i,T_j)1≤i<j≤n∑Ti+Tj−2×lcp(Ti,Tj)=n(n−1)(n+1)2+∑1≤i<j≤n2×lcp(Ti,Tj)=\frac{n(n-1)(n+1)}{...原创 2020-02-01 20:18:32 · 216 阅读 · 0 评论 -
[BJWC2010]外星联络
一、题目点此看题二、解法考虑后缀数组来完成此题,可以先算出sa,rk,heightsa,rk,heightsa,rk,height有了这些以后,我们来看关键代码(我也是第一次写后缀数组的题,结合代码讲一讲):for(int i=2;i<=n;i++) for(int j=hi[i-1]+1;j<=hi[i];j++) { int k=i; ...原创 2020-02-01 18:41:20 · 172 阅读 · 0 评论 -
[USACO12JAN]视频游戏的连击
一、题目点此看题二、解法又是一道AC\text{AC}AC自动机上dpdpdp的题,随手乱切。设f[i][j]f[i][j]f[i][j]为长度为iii,在自动机上匹配到jjj点的最大值,一开始全赋最小值,在failfailfail树上求一个链的前缀和,直接转移即可,时间复杂度O(3×15×nk)O(3\times 15\times nk)O(3×15×nk),贴个代码。#include...原创 2020-01-30 21:57:06 · 123 阅读 · 0 评论 -
[JSOI2007]文本生成器
一、题目点此看题二、解法AC\text{AC}AC自动机上dpdpdp,这里有一个加强版设f[i][j]f[i][j]f[i][j]为长度为iii,匹配到了自动机上的点jjj。dpdpdp时直接暴力转移即可,注意当出现了一个认识的单词后立即算贡献,未填的随便选,停止它的转移。时间复杂度O(26×100×nm)O(26\times 100\times nm)O(26×100×nm),贴个代...原创 2020-01-30 21:29:59 · 146 阅读 · 0 评论 -
[SCOI2012]喵星球上的点名
一、题目点此看题二、解法0x01 AC自动机如果字符集没有这么大的话,就是AC\text{AC}AC自动机的板题。我们可以开mapmapmap存转移,然后就完了,写了之后对mapmapmap的理解会有所提升吧,虽然是过不了luoguluoguluogu的...原创 2020-01-30 18:02:42 · 194 阅读 · 0 评论 -
[CQOI2014]通配符匹配
一、题目点此看题弱化版:[AHOI2005]病毒检测二、解法先把*当成分割符,这样带通配符的串就被划分成了若干个小串,我们对于每一个小串在去另一个串中匹配。对于每一个小串,以?为分割符,将它插入AC\text{AC}AC自动机中,标记终止节点,把在小串中的终止位置存在ed[x]ed[x]ed[x]中(类型为vectorvectorvector),然后我们把一个点在failfailfail...原创 2020-01-30 16:18:50 · 339 阅读 · 0 评论 -
[NOI2011]阿狸的打字机
一、题目电磁看题二、解法我们先对输入的字符串建出ACACAC自动机,自动机的点数是O(n)O(n)O(n)的,建法如下:遇到小写字母,跳自动机上的边,看是否需要新建点。遇到P,存下字符串对应在自动机上的点编号。遇到B,向当前点的父亲上跳。考虑xxx串在yyy串的出现次数,具体过程就是在自动机上跳到yyy,路径上的每一个点都去跳failfailfail,跳到xxx对应点的次数即为出...原创 2020-01-30 12:08:42 · 155 阅读 · 0 评论 -
[GDKOI2013]大山王国的城市规划
一、题目二、解法建出回文自动机,自动机上的每一个节点都代表一个回文串,我们考虑一个串不是另一个串子串的问题。分情况考虑,首先选的节点必须不同。然后就是两边个去掉一个字符(重复若干次)不能相等,反应到自动机上就是没有父子关系。还有一种就是不能是前缀后缀回文串,反应到自动机上就是failfailfail树上没有父子关系。构建一个有向图,把回文树和failfailfail上的边当成有向边加进去...原创 2020-01-29 12:36:08 · 409 阅读 · 0 评论 -
[hackerrank Palindromic Border]
一、题目二、解法从一个O(n2)O(n^2)O(n2)的解法讲起吧,我们考虑每一种子串的贡献,如果这个子串是回文的,设它的出现次数为xxx,那么选两个不同的出现位置即会有1的贡献,求和x(x−1)2\frac{x(x-1)}{2}2x(x−1)即可。既然是回文串,考虑用回文自动机来优化,我们加入逐个右端点iii,得到以iii结尾的最长回文子串lastlastlast,我们考虑把所有以ii...原创 2020-01-29 11:54:18 · 197 阅读 · 0 评论 -
[ZeroJudge b179]Cans
一、题目传送门(可能传不进去)二、解法在ACACAC自动机上dpdpdp,设dp[t][i][j]dp[t][i][j]dp[t][i][j]表示第ttt天字符串的长度为iii,在非法字符串的自动机上的点为jjj的方案数,考虑转移:加入a-d的一个,直接枚举选哪个,然后在自动机上直接跳,需要判断转移后是否非法。删去首位,分情况讨论。如果删去后长度为000,直接丢进回收站。如果删去后...原创 2020-01-29 11:21:22 · 320 阅读 · 0 评论 -
[HDU 5659]CA Loves Substring
一、题目点此看题题目描述多组数据,给你一个字符串,求从每一个字符断开(分成s[1,i]s[1,i]s[1,i]和s[i+1,n]s[i+1,n]s[i+1,n])分成的子串中本质不同的字符串数量,输出需要压缩,详见英文版题目。数据范围1≤n≤2000001\leq n\leq2000001≤n≤200000二、解法正难则反,我们考虑计算出本质不同的子串数量,然后计算出跨过断开处且没有...原创 2020-01-28 18:00:19 · 147 阅读 · 0 评论 -
[自学笔记]各种自动机
AC自动机yyb巨佬的博客贴一个模板题的代码:#include <cstdio>#include <cstring>#include <queue>using namespace std;const int M = 1000005;int read(){ int x=0,flag=1;char c; while((c=getchar())&...原创 2020-01-27 17:37:13 · 167 阅读 · 0 评论 -
[BZOJ 4931]塔
一、题目二、解法假设我们已经的到了一个答案lenlenlen,我们在插入操作后考虑扩展这个lenlenlen,每次插入一个点,多插的点会让回文串有机会为len,len+1len,len+1len,len+1,我们可以用hashhashhash判断新插入的点构成的回文串,时间复杂度O(1)O(1)O(1)。前插和后插,hashhashhash可以!撤回操作,hashhashhash可以!我们...原创 2020-01-21 13:51:49 · 168 阅读 · 0 评论 -
[BZOJ 4259]残缺的字符串
一、题目点此看题二、解法我们一般的匹配多是第一种形式,如果我们把某一个字符串翻转,那么匹配的形式就变成了第二种,是不是很像卷积的形式,如果我们把匹配当做卷积的话,那么时间是允许的,我们考虑这种方法。首先通配符可以看做000,我们可以把某个位置yyy匹配成功的条件写成:∑i=1yTi×Sy−i+1×(Ti−Sy−i+1)2\sum_{i=1}^y T_i\times S_{y-i+1}\...原创 2020-01-21 07:59:48 · 195 阅读 · 0 评论 -
[ASC]PROB
一、题目二、解法要求第kkk小,可以用类似线段树的方法逐位确定,先考虑全空的串,怎么求长度为nnn的borderlessborderlessborderless串?我们定义f[i]f[i]f[i]为长度为iii的borderlessborderlessborderless串数量,转移考虑容斥:f[i]=2i−∑j=1i/2f[j]×2i−2jf[i]=2^i-\sum_{j=1}^{i/...原创 2020-01-20 21:37:11 · 156 阅读 · 0 评论 -
[51nod 1444]打字的猴子
一、题目二、解法考虑dpdpdp,设E[i]E[i]E[i]为已经成功匹配到了iii,想要匹配到nnn的期望,那么答案就是E[0]E[0]E[0],考虑多匹配一个字符后的影响,我们用transtranstrans来描述它,转移如下:E[x]=1k∑i=1kE[trans[x][i]]+1E[x]=\frac{1}{k}\sum_{i=1}^k E[trans[x][i]]+1E[x]=k1...原创 2020-01-20 21:09:21 · 302 阅读 · 0 评论 -
[bzoj十连测]Problem
找不到题,没有代码qwqqwqqwq一、题目题目描述有一颗字典树tiretiretire,现在每次加入一个叶子,你需要回答这个点到根路径代表的字符串的最长公共前缀后缀是多少,强制在线。数据范围节点数,操作数,字符集大小均为100000100000100000以内。二、解法最长公共前缀后缀显然是kmpkmpkmp,但是kmpkmpkmp的均摊复杂度分析在树上就失效了,我们要用其他方法。...原创 2020-01-20 20:34:17 · 205 阅读 · 0 评论