![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
文章平均质量分 61
wind__whisper
qwq
展开
-
模板:子序列自动机(字符串)
子序列自动机原创 2022-07-08 09:53:54 · 417 阅读 · 0 评论 -
模板:P6114 【模板】Lyndon 分解&Runs(字符串)
高端字符串操作原创 2022-06-20 18:20:06 · 197 阅读 · 0 评论 -
P3426 [POI2005]SZA-Template(kmp、dp)
神奇kmp dp原创 2022-05-17 23:59:26 · 195 阅读 · 0 评论 -
P4384 [八省联考 2018] 制胡窜(SAM)
SAM原创 2022-03-21 17:20:00 · 244 阅读 · 0 评论 -
模板:拓展kmp(Z函数)
lcp 的计算技巧原创 2022-03-11 10:57:20 · 252 阅读 · 0 评论 -
洛谷P5212:SubString(SAM、LCT)
SAM套LCT原创 2022-01-24 13:55:32 · 343 阅读 · 2 评论 -
洛谷P7361:拜神(SA、二分、主席树、启发式合并)
SA应用原创 2022-01-23 21:34:22 · 360 阅读 · 0 评论 -
模板:广义SAM(字符串)
广义SAM用于解决多字符串的子串问题原创 2022-01-22 22:26:14 · 572 阅读 · 0 评论 -
洛谷P4762: [CERC2014]Virus synthesis(PAM)
PAM练习原创 2022-01-18 16:40:58 · 250 阅读 · 0 评论 -
模板:回文自动机(PAM)
PAM用于解决回文相关问题,是一个相对比较容易理解的字符串算法原创 2022-01-16 21:38:44 · 406 阅读 · 0 评论 -
洛谷P4173:残缺的字符串(FFT、通配符匹配)
利用FFT解决字符串匹配问题原创 2022-01-08 21:16:34 · 358 阅读 · 0 评论 -
CF700E Cool Slogans(SAM,dp)
一道SAM的证明很棒的结论题原创 2021-12-25 23:16:13 · 248 阅读 · 0 评论 -
P4770:你的名字(SAM、线段树合并)
SAM毒瘤题原创 2021-12-25 11:15:27 · 190 阅读 · 0 评论 -
CF1037H Security(SAM)
SAM的进阶应用原创 2021-12-25 00:07:11 · 214 阅读 · 0 评论 -
模板:后缀自动机(SAM)
一寸难,一寸强原创 2021-12-24 17:01:29 · 832 阅读 · 0 评论 -
模板:后缀数组(SA)
强大的算法原创 2021-12-21 00:15:19 · 447 阅读 · 0 评论 -
模板:(多重)哈希
前言还在为不想写双哈希又怕哈希冲突挂掉发愁吗?来这里,满足你的一切梦想!哈希还有模板?其实就是把相关的函数和数组打包到一个结构体里但是针心方便啊!!!如果想双哈希的话,定义一个h2就好啦极其方便,避免各种数组冲突、复制数组没改干净等烦恼甚至还可以有这样的惊天n重哈希!这能卡掉我给您跪下(复制的话点个赞呗亲awa)11哈希int key[12]={0,131,133,107,173,1091,31,131,1331,11,257,277};int mod[12]={0,10000原创 2021-08-31 17:44:27 · 250 阅读 · 0 评论 -
YBTOJ:运动积分(trie树)
文章目录题目描述解析代码题目描述解析做了巨长时间…进行了一次刺激的阅读理解竞赛…感谢whh dalao!那么让我们分析一下这道题首先我们考虑单个求x选手的q值不难发现a[i]在第j天和x的大小关系只与x与a[i]二进制下不同的最高位k有关j的第k位与x相同时,a[i]就大,否则反之那么对于当前的x,其实我们可以把所有的a分为m类同一类的a对于x来说就是等价的跑trie树可以得到每一类的个数,设为f[0-(m-1)]吧然后就是考虑如何计算贡献按题目要求的前面有x人时的贡献为x2原创 2021-07-31 18:11:50 · 233 阅读 · 1 评论 -
YBTOJ:前缀询问(trie树)
文章目录题目描述解析代码题目描述解析(没有做出来,这个ans的处理方式其实也不难想…qwq)考虑把T都作为模板串加入trie树加入每个模板串自然就是按照i顺序的所以我们在插入t的时候沿途标记一下新出现的未标记的i的间隔就是当前的i与上一次的标记的差-1在其中一直取max即可得到最大间隔不要忘记还有一个间隔是n-最后的标记值!预处理完trie树后就简单了让s在trie树上跑,跑到尾就返回尾的ans值即可如果跑一半失配了说明没有t符合条件,直接返回n即可代码#include<原创 2021-07-31 01:14:11 · 203 阅读 · 0 评论 -
YBTOJ&&洛谷P4551:最长异或路径(trie树)
洛谷传送门文章目录题目描述解析代码题目描述解析本题关键就在于一点:若把每个点的深度dep[i]定义为从根到节点边权的异或和那么i到j的路径异或和可以表示为:dep[i] ^ dep[j]首先要是i、j在不同子树上显然成立如果他们在同一子树上,那么它们到根的公共部分异或两遍会抵消所以也是成立的这样dfs一遍求出dep数组本题就变成01trie的模板题了代码#include<bits/stdc++.h>using namespace std;#define ll原创 2021-07-30 16:39:18 · 144 阅读 · 0 评论 -
YBTOJ:字符匹配(KMP)
文章目录题目描述解析代码题目描述解析显然应该要尝试套kmp的板子关键是如何套也就是那个判断匹配的条件是什么的问题本题的关键是当kmp匹配时,匹配位之前的所有位大小关系的顺序都是匹配的,所以我们只需要看当前位即可考虑对b预处理出3个数组:id1[i]:[1,i-1]中与i相等的最靠右的数与i的距离id2[i]:[1,i-1]中比i小的最大的数中最靠右的与i的距离id3[i]:[1,i-1]中比i大的最小的数中最靠右的与i的距离(其实不是最靠右也可以啦,只是最靠右容易求)对于”最靠原创 2021-07-30 15:34:30 · 263 阅读 · 0 评论 -
YBTOJ:字符串匹配(KMP)
文章目录题目描述解析代码题目描述解析看了题解。。。这题的关键在于可以变换匹配的一个充要条件:每个字符与前一个相同字符的距离相同这个搞出来之后就可以以它为关键字进行KMP了注意!当与前一个字符的距离超过匹配长度时,是没有意义的,应该当做首次出现处理!代码#include<bits/stdc++.h>using namespace std;#define ll long longtypedef unsigned long long ull;const int N =原创 2021-07-30 11:26:54 · 218 阅读 · 0 评论 -
YBTOJ:字符串题(KMP)
文章目录题目描述解析1.p[i]>0:2.p[i]=0:代码题目描述解析我个人做起来很费劲的一道题,用vector,并查集等等东西搞来搞去过掉了(竟然只WA了一次 )看题解思路就一下子清晰了,还是对KMP的理解不到位。现在看看题解的表演吧首先容易想到,若设kmp的失配数组为p,则有:p[i]=i−pre[i]p[i]=i-pre[i]p[i]=i−pre[i]现在问题就是如何利用失配数组逆推出字符串因为字典序贪心显然是正确的所以我们可以从前往后推导假设[1,i-1]的字符串都已求原创 2021-07-29 21:57:08 · 253 阅读 · 0 评论 -
YBTOJ:前缀数组(KMP)
文章目录题目描述解析代码题目描述解析题面脸上写着5个大字:我是KMP但是本题没有自己做出来。。。我一开始的思路其实很接近题解了,只是被我舍弃了qwq。后来卡在暴力nL2的瓶颈上,用了个倍增的诡异操作搞到了nLlogL,但是n=5,L=1e6还是过不去。。。(我其实觉得1e8能过啊qwq)接下来讲讲题解思路吧其实也简单,就是预处理出失配指针后我们的目标是对每一个i不断令k往前跳失配数组,直到k<=i/2位置(所以我就用倍增了啊awa)但这个可以用和kmp很类似的办法O(n)维护:就原创 2021-07-29 19:01:52 · 184 阅读 · 0 评论 -
YBTOJ:公共子串(KMP)
文章目录题目描述解析代码题目描述解析我的做法是二分答案,暴力枚举子串,对其他的字符串进行KMP。复杂度logL*L2没有一次AC,因为忘记了字符串清零!,否则它会和上次二分的字符串没被覆盖到的部分连在一起。之前遇到过类似的问题了,没有引起重视,需要注意一下做完后看了下题解,其实不用二分答案,用最短串枚举起点,对其他串进行KMP匹配,记录最大的失配位置就可以了,复杂度比我的做法少一个log代码(还是带log的做法。。。)#include<bits/stdc++.h>usin原创 2021-07-29 16:44:11 · 168 阅读 · 0 评论 -
YBTOJ:求好元素(哈希表)
文章目录题目描述解析代码题目描述解析如果枚举m,n,p的话是n3的会超时但我们注意到右边查询只有O(n)这就很不平衡所以考虑把p移到右边,预处理枚举m、n存到哈希表中查询枚举i、p这样就把复杂度均摊降到了n2但是本题数据较强所以我们得保证哈希表的单词查询复杂度近似于O1因此我们需要一个1e7左右的质数此外,还要注意点的个数和边数都应该是n2级,3e7左右好在本题空间复杂度是比较充裕的可以通过代码#include<bits/stdc++.h>using na原创 2021-07-29 12:06:39 · 274 阅读 · 0 评论 -
YBTOJ 特殊数列(哈希表)
文章目录题目描述解析代码题目描述解析应该是哈希表板子题了选一个1e6左右的质数进行处理即可其实本质就是链前没啥特别新鲜的为什么要写呢?因为这个东西很早之前看的时候完全没有看懂。。。代码#include<bits/stdc++.h>using namespace std;#define ll long longtypedef unsigned long long ull;const int N = 3e6+100;const ll mod=1e6+3;ll a,b原创 2021-07-29 11:32:07 · 337 阅读 · 1 评论 -
P2601 [ZJOI2009]对称的正方形(二维哈希)(二分)
洛谷传送门文章目录题目描述解析代码题目描述解析做三个hash分一下正方形边长的奇偶性然后枚举中心点,二分边长即可有点类似模拟赛那道红十字的题我一开始觉得分奇偶好麻烦啊为什么不直接枚举左上方的点二分呢?awa很遗憾的是…那样答案就没有单调性了啊…我个傻子qwq代码#include<bits/stdc++.h>using namespace std;#define ll long longtypedef unsigned long long ull;const原创 2021-07-28 16:08:28 · 183 阅读 · 0 评论 -
YBTOJ:前缀匹配(AC自动机)
文章目录题目描述解析代码题目描述解析做的不错把trie树真的当成一棵树递归即可注意一个标记时的问题:void AC(){ int l=strlen(s0+1),pl=1; for(int i=1;i<=l;i++){ int a=ask(s0[i]); pl=tr[pl][a]; int k=pl; while(k>1){ if(ok[k]) break;//注意! ok[k]=1;k=nxt[k]; } }}原题数据不写这行没关系但我原创 2021-07-21 23:48:06 · 118 阅读 · 0 评论 -
YBTOJ:单词频率(AC自动机)
解析我对力量一无所知通过这题,可以看出我对AC自动机还是完全没有理解qwq首先容易想到:建一课trie树,然后建树时记录每个串s的终点,这个点后面每被经过一次,就相当于出现一次该单词s但是,这种“出现”:只是当s恰好是后面的前缀时,才会被计算所以我们想到(其实到这我就没想到 )任何一个以s为后缀的结点被遍历到时,s都会出现一次同时我们发现,这样统计可以做到不重不漏所以我们就可以写出一个不伦不类的方程:ans[s]=∑ans [s1] (s是s1的后缀)然后利用AC自动机的机.原创 2021-07-21 23:19:50 · 274 阅读 · 2 评论 -
周期长度和(KMP)
文章目录题目描述解析问题总结代码题目描述解析我们可以看到如果A是B的周期那么B一定可以写成:A1A2A1的形式注意到:A1就是KMP中的公共前后缀要使A最大,要使A1最短也就是求最短公共前后缀这怎么求呢?我们注意到:B的最短前后缀,其实也是B的最长前后缀(就是KMP处理出来的那个东西)的最短前后缀所以递归求解即可,过程类似于并查集边界条件:失配数组为0时返回本身int find(int x){ return p[x] ? p[x]=find(p[x]) : x;}原创 2021-06-13 18:46:28 · 324 阅读 · 0 评论 -
判断溢出(ybtoj-字符串)
题目描述我们将给你一些数和一个数据类型,你需要判断,如果将这些数连续相乘起来,将会在第几个数出现溢出的情况。输入格式多组数据。第一行只有一个整数,表示组数。每个数据分为两行。第一行只有一个字符串,表示要检测的数据类型。第二行有若干正整数,依次表示每一个给出的数,相邻的两个数之间用一个空格隔开。输出格式对于每个输入数据,输出一行,表示在乘到第几个数的时候溢出了。如果一直都没有溢出,则输出一行 never。样例输入4int32 100000 100000 100000int16 1原创 2021-06-10 23:42:41 · 715 阅读 · 0 评论 -
AC自动机:例题与机制详解
介绍AC自动机是kmp算法和trie树的结合大体就是做这样的题用:可以发现,这题和trie树的区别是把多个单词往一篇文章匹配,而trie恰好相反匹配的时候其实就是判断子串,所以又用到了kmp定义失配指针nxt[i]:表示root到nxt[i]结点的字符串是到nxt[i]结点的字符串的在本树中的最长后缀(其实和kmp差不多啦)设文章下一个字是s,当前trie树结点是a每次发现a结点下方没有s的儿子~~(膝下无子)~~ 就回去重新找失配指针现在考虑处理失配指针因为显然nxt[i]的深度小于i原创 2021-03-21 23:23:56 · 188 阅读 · 0 评论 -
字符串:凯撒密码(洛谷P1914)
解析只需将每一位ascll码加n即可但要注意的是c++的ascll码是有上限的我一开始是这么写的:for(int i=1;i<=l;i++){ s[i] += n; while(s[i]>'z') s[i] -= 26; printf("%c",s[i]); }结果:(真的是随便打的,不巧有些攻击性。。)因为它在执行’q‘和’r‘+26时,已经超出范围,于是就生成了乱码所以要进行一些细节的处理(具体见代码)代码#include<cstdio>.原创 2021-01-24 23:15:14 · 550 阅读 · 0 评论