字符串
KIDGINBROOK
这个作者很懒,什么都没留下…
展开
-
hdu 1358 Period KMP
题目大意:对于一个字符串,找由循环字符串组成的位置,并输出最多循环了几次,比如两个样例,第一个是 aaa ,所以在第二个位置由子串a循环两次得到,第三个位置由a循环3次,第二个样例aabaabaabaab,在第二个位置由a循环两次,在第六个位置由aab循环两次,在第9个位置由aab循环3次,在第12个位置由aab循环4次,注意,在第12个位置不是由aabaab循环2次,因为要求循环次数最多。k原创 2013-11-15 21:06:06 · 505 阅读 · 0 评论 -
hdu 3746 Cyclic Nacklace
#include #include char b[100020];int p[100020];int main(){ int i,j,y; int cas; scanf("%ld",&cas); while(cas--) { scanf("%s",b+1); y=strlen(b+1); j=0;原创 2014-06-06 13:37:03 · 396 阅读 · 0 评论 -
两个kmp hdu 2594 & hdu 2087
#include #include char a[110000],b[110000];int p[110000];int main(){ int i,j; int y; while(scanf("%s",b+1)!=EOF) { int len=strlen(b+1); b[len+1]='X'; b[len原创 2014-06-08 10:57:24 · 396 阅读 · 0 评论 -
hdu 3336 count the string
解释题意:求给定字符串含前缀的数量abab前缀为aababaabababab中共有六个子串是前缀a a ab ab aba abab所以答案为6利用kmp中的匹配原理可以完美的解决此题a---------d----- -----a---------d i j如上所示,假设两串字符完全相等,ne原创 2021-01-05 18:56:55 · 460 阅读 · 0 评论 -
hdu 3068 最长回文 manacher
#include#include#includeusing namespace std;#define maxx 20000050char str[2*maxx];char s[maxx];int p[maxx];void Manacher(int *p,char *str,int len){ int mx=0; int idx=0; for(int i=原创 2014-06-10 21:01:19 · 515 阅读 · 0 评论 -
hdu 4333 Revolving Digits 扩展kmp
#include#include #includeusing namespace std;const int MM=201000;int next[MM],extand[MM],next2[MM];char S[MM],T[MM];void GetNext(const char *T){ int len=strlen(T),a=0; next[0]=len;原创 2014-06-10 22:40:34 · 369 阅读 · 0 评论 -
hdu 3613 Best Reward 扩展kmp
#include#include#includeusing namespace std;const int MM=500100;int next1[MM],extand1[MM];int next2[MM],extand2[MM];int sum[MM];char S[MM],T[MM];int val[30];void GetNext(const char *T,int *n原创 2014-06-15 15:15:05 · 411 阅读 · 0 评论 -
Hackerrank--Ashton and String (后缀数组)
#include #include #include using namespace std;#define maxn 100100int wa[maxn],wb[maxn],wv[maxn],ws[maxn];int r[maxn],sa[maxn];char str[maxn];int cmp(int *r,int a,int b,int l){return r[a]==r[原创 2014-12-19 21:51:51 · 557 阅读 · 0 评论 -
hdu 5008 Boring String Problem 后缀数组
给出一个字符串,对于每次的k,求所有子串(去除重复后的)中排名为k的L和R,其中如果有多组解,输出L最小的。后缀数组处理过后,sum[i]表示 sa[1] 到 sa[i] 一共有多少个非重复字串,在sum数组中二分求出k的lower_bound=pos,那么第一次出现这个子串的后缀就是sa[pos],但是有可能有多组解,所以还要往下找所有height[i]>=目标字符串长度 的所有后缀中sa值原创 2014-12-19 21:52:55 · 663 阅读 · 0 评论 -
la 4513 Stammering Aliens 字符串哈希
题意:对于给定的字符串找出至少出现m次的最长字符串,输出长度及其出现位置的最大值。#include #include #include using namespace std;const int maxn = 41000;const int bas = 107;unsigned long long Hash[maxn],p[maxn],com[maxn];char s[ma原创 2015-01-14 21:35:42 · 485 阅读 · 0 评论 -
uva 11019 Matrix Matcher 字符串哈希
题意:一个文本矩阵和一个模式矩阵,求模式矩阵在文本矩阵中出现次数。二维哈希。#include #include #include using namespace std;#define a 321#define b 207#define ull long longint n,m,x,y;ull h1[1100][1100],h2[1100][1100];char T[11原创 2015-01-15 11:58:05 · 587 阅读 · 0 评论 -
hdu 3695 Computer Virus on Planet Pandora ac自动机
#include #include #include using namespace std;#define SIGMA_SIZE 30#define MAXNODE 300000int ch[MAXNODE][SIGMA_SIZE];int f[MAXNODE]; // fail函数int val[MAXNODE]; // 每个字符串的结尾结点都有一个非0的valint原创 2014-06-23 16:05:49 · 537 阅读 · 0 评论 -
hdu 2896 病毒侵袭 ac自动机
#include #include #include using namespace std;#define MAXNODE 100100#define SIGMA_SIZE 135int ch[MAXNODE][SIGMA_SIZE];int f[MAXNODE]; // fail函数int val[MAXNODE]; // 每个字符串的结尾结点都有一个非0的vali原创 2014-04-28 16:09:15 · 465 阅读 · 0 评论 -
hdu 3065 病毒侵袭持续中 ac自动机
#include #include #include #define MAXNODE 50000#define SIGMA_SIZE 100using namespace std;int ch[MAXNODE][SIGMA_SIZE];int f[MAXNODE]; // fail函数int val[MAXNODE]; // 每个字符串的结尾结点都有一个非0的valint原创 2014-04-28 16:53:50 · 457 阅读 · 0 评论 -
扩展kmp
出自http://www.cppblog.com/MatoNo1/archive/2011/04/17/144390.aspx扩展KMP:给出模板串A和子串B,长度分别为lenA和lenB,要求在线性时间内,对于每个A[i](0【算法】设next[i]为满足B[i..i+z-1]==B[0..z-1]的最大的z值(也就是B的自身匹配)。设目前next[0..lenB-1]与ex[0..转载 2013-11-16 23:33:16 · 515 阅读 · 0 评论 -
hdu 1711 kmp
裸的kmp#include long a[1000020],b[10020],p[10020];int main(){ long i,j,n,k,x,y; int flag; scanf("%ld",&n); for(k=0;k<n;k++) { flag=0; scanf("%ld%ld",&x,&y);原创 2013-08-18 20:52:33 · 499 阅读 · 0 评论 -
KMP算法详解 出自matrix67.com
如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。 我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67",字符串B="matrix",我们就说B是A的子串。你可以委婉地问你的MM:“假如转载 2013-08-18 20:49:57 · 773 阅读 · 0 评论 -
hdu 2203 亲和串 kmp
因为s2可以出现在s1的一头一尾,所以要在s1末端补上s1开头的一截长为s2的字符,然后进行一遍kmp。#include #include char a[200020],b[100020];long p[100020];int main(){ long i,j,n,k,x,y; int flag; while(scanf("%s",&a)!=EOF)原创 2013-08-18 21:01:51 · 539 阅读 · 0 评论 -
hdu 2222 Keywords Search AC自动机
AC自动机的裸题,不过需要注意几个地方,keywords中有重复的,而且模板中会重复出现keywords~#include #include #define SIGMA_SIZE 26#define MAXNODE 500100using namespace std;int ch[MAXNODE][SIGMA_SIZE];int f[MAXNODE]; // fail函数原创 2013-12-21 11:50:35 · 466 阅读 · 0 评论 -
后缀数组 倍增算法 出自http://www.cnblogs.com/staginner/archive/2012/02/02/2335600.html
int wa[maxn],wb[maxn],wv[maxn],ws[maxn];int cmp(int *r,int a,int b,int l){return r[a]==r[b]&&r[a+l]==r[b+l];} //就像论文所说,由于末尾填了0,所以如果r[a]==r[b](实际是y[a]==y[b]),说明待合并的两个长为j的字符串,前面那个一定不包含末尾0,因而后面这个的起始位置转载 2014-01-14 14:51:23 · 781 阅读 · 0 评论 -
cf 427D Match & Catch 后缀数组
将两个字符串连接,中间加一个没出现的字符,最后添加原创 2014-05-05 15:30:30 · 477 阅读 · 0 评论 -
hdu 1867 A + B for you again kmp
将两个字符串连接起来,中间加一个没出现过的字符,getfail一下原创 2014-05-15 16:44:46 · 490 阅读 · 0 评论 -
cf 432D Prefixes and Suffixes kmp
题意是求原创 2014-05-16 19:46:37 · 603 阅读 · 0 评论 -
poj 1743 Musical Theme 后缀数组
二分最大长度len,再按分组原创 2014-05-16 19:58:28 · 425 阅读 · 0 评论 -
UVa 10887 - Concatenation of Languages 哈希
题意:将A集合的词与B集合中的词两两连接,求非重复的有多少个。哈希,我直接用的map。#include #include #include #include #include using namespace std;map mp;int cas,n,m;int sum=0;char s1[1600][15],s2[1600][15];char c[30];int m原创 2015-01-15 12:34:27 · 456 阅读 · 0 评论