字符串--匹配
Phoenix丶HN
这个作者很懒,什么都没留下…
展开
-
初试KMP!
题目链接 题意:一堆废话,就是说取一个前缀和一个后缀,求他们之间相同的字串的长度(然后按题意算一算)。 难点就是求这个相同的长度。 当然首想KMP;(KMP的next数组存的是前面字串前缀和后缀重复的长度) 枚举每一个后缀,再枚举每一个前缀,求一下公共长度,算一下就好了!#include #include #include #include #include #include #inc原创 2017-05-18 09:16:35 · 193 阅读 · 0 评论 -
哈希标记取代(KMP和AC自动机)poj3690
#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; const ll INFF=0x3原创 2017-04-20 16:51:25 · 372 阅读 · 0 评论 -
manacher算法入门HDU5731
马拉车算法,线性求出回文串。。具体就不讲了,可以参考博题目链接客 说下这个题的想法,,,首先求出每个数字的回文串长度(包括-1的)。然后枚举每一个数,在他的回文串长度内,继续枚举右区间,看右区间有没有回文串长度和左区间一样长的。然后求个最大值就好了。。。就是说 在2 3 4 4 3 2 2 3 4 中找到了最长的回文串 2 3 4 4 3 2.然后枚举4 3 2看他们的回文串长度有没有回文串长度原创 2017-06-05 21:26:02 · 250 阅读 · 0 评论 -
HDU5782(结论题hash+字符串同构)
【题目大意】 给出两个字符串,判断他们每一个前缀是否循环同构,循环同构的意思就是,字符串首位相接拼成一个环,两个环通过旋转可以相等。 【题解】 这道题用到了一个神奇的结论,如果S字符串和T字符串循环同构,那么必有S=u+v,T=v+u,而且u和v必有一个是最长匹配。 那么根据这个结论,我们可以用KMP算法在T中找S的最长前缀,也就是每次匹配到i时候的j。那么对于T的前缀和原创 2017-07-28 10:34:01 · 431 阅读 · 0 评论 -
KMP匹配原串中有多少子串
#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int INF=0x3f3f3f3f; char str[1000010]; char原创 2017-05-20 20:08:03 · 328 阅读 · 0 评论 -
HDU5880(AC自动机)
多模字符串匹配模板#include #include #include #include #include using namespace std; int ans[1000010],cnt[1000010]; struct Trie { int next[1000010][26],fail[1000010],End[1000010]; int root,L,pos;原创 2017-08-07 20:13:43 · 363 阅读 · 0 评论 -
Educational Codeforces Round 25 F. String Compression(kmp+dp)
题解:这个题无非就是想找到字符串每一段的循环节。经典KMP便可以找到字符串的循环节。问题解决#include using namespace std; typedef long long ll; const int INF=0x3f3f3f3f; char s1[8010],s2[8010]; int len; int Next[8010]; void get_next(int len2) {原创 2017-07-19 15:45:37 · 209 阅读 · 0 评论