字符串
哈希表扁豆
此人不懒,但什么都没写
展开
-
存个后缀数组板子
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=2e4+5 int n,k,a[maxn],m,wa[maxn],wb[maxn],wv[maxn],ws[maxn]; int rank[maxn],height[maxn]; int cmp(int *r,int a,int b,i原创 2021-08-10 16:34:48 · 73 阅读 · 0 评论 -
P4391 [BOI2009]Radio Transmission
答案为n-f[n],f[n]为给定字符串的最长公共前后缀。 可通过画图证明+反证。 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn = 1e6+5; int n,num,f[maxn]; char str[maxn]; int main() { scanf("%d",&n); getchar(); s.原创 2021-07-28 14:06:06 · 83 阅读 · 0 评论 -
KMP模板
时间复杂度O(m+n) 相较于朴素的O(m*n),KMP思想在于当主串的某一位与匹配串的某一位不匹配时,将匹配串根据已匹配部分的公共前后缀的长度移动,主串中的每一位只会做一次匹配。 f不仅表示最长公共前后缀的长度,还表示也是子串回溯后应该对应的字符在子串的下标。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn = 1e6+5; char .原创 2021-06-24 00:03:23 · 81 阅读 · 0 评论 -
UVA-1328 Period
题意:对于给定字符串S的每个前缀,我们想知道它是否为周期串。也就还是说,它是否为某一字符串重复连接而成(必须至少重复2次)(即循环节)。 思路:考虑一个周期串,周期串-其最长相等前后缀=循环节,此时i%(i-f[i])=0&&f[i]>0,反过来此条件成立,则该串为周期串。其中f[i]为0~i-1的最长公共前后缀的长度(MP算法的移位数组)。 #include<iostream> #include<cstdio> using namespace std; .原创 2021-06-23 18:41:37 · 89 阅读 · 0 评论 -
Trie(前缀树)
字面意思,保存字符串前缀的树型结构。 根到任意节点的路径代表一个前缀,每个结点一个编号,根的编号为0。 Trie如上图,用二维数组ch[][]建树(类似邻接矩阵),ch[u][c]表示结点u通过编号为c的字母所到达的结点(u编号为c的子节点),同时为方便维护每个结点u对应权值val[u],如可以用来区分单词几点与非单词结点。 UVA1401 Remember the Word Trie+Dp #include <iostream> #include <cstdio> #inc.原创 2021-06-15 21:36:27 · 138 阅读 · 2 评论 -
UVA1610 聚会游戏 Party Games
仔细读题,大于等于而不是大于; 首先对所有字符串排序; 如果在两者最短长度内一直相同,答案就是这一部分; 考虑能不能在第一位不一样的位置j解决,分三种情况:较小串的长度为j+1,较大串与较小串在这一位的差值大于1,较大串的长度>j+1;需保证字典序最小,三种情况应一次讨论; 根据较小串找到最低的能够确定答案的位,注意,如果是最后一位,答案应该是较小串的最后一位; #include <iostream> #include <cstdio> #include <cstri.原创 2021-04-19 20:46:36 · 131 阅读 · 0 评论