kmp
文章平均质量分 68
ijbuhv
这个作者很懒,什么都没留下…
展开
-
hdu3336Count the string kmp
//给出一个序列,求出这个序列的所有的前缀 //在这个序列中出现的次数 //用kmp处理出next,然后对于每一个next[i] > 0的位置,找 //next[next[i]]的位置,看其是否大于0 #include #include #include using namespace std ; const int maxn = 2e5+10 ; const int mod = 1e4+7 ;原创 2015-10-22 22:45:10 · 292 阅读 · 0 评论 -
hdu1711Number Sequence kmp模板题
参考博客:http://blog.csdn.net/v_july_v/article/details/7041827 #include #include #include using namespace std ; const int maxn = 1e6+10 ; const int maxm = 1e4+10 ; int s[maxn] ; int p[maxm] ; int Next[ma原创 2015-10-22 20:28:41 · 304 阅读 · 0 评论 -
hdu5510 kmp+二分
//给出n个字符串,找出最大的i //使得在(1<=j<i)的范围内有字符串不是i的子串 //从n-1开始往前推,如果字符串j是字符串str[n]的子串 //那么字符串j是在字符串n的哪个区间范围内 //存下前面所有字符串在字符串n的所有区间 //然后可以用二分找到第一个不包含这个区间的前面的区间 #include #include #include #include using namespac原创 2015-11-08 17:03:55 · 390 阅读 · 0 评论 -
poj1961Period kmp
//给定一个循环序列,求其循环次数大于1的最长节的长度 //和其循环的次数 #include #include #include using namespace std ; const int maxn = 1e6+10 ; char p[maxn] ; int Next[maxn] ; void get_next(int n) { Next[0] = -1 ; int j =原创 2015-10-27 20:00:15 · 290 阅读 · 0 评论 -
hdu3374String Problem kmp+最大最小表示法
//给出一个序列,求其最大最小表示法的最小位置 //并且求出有多少这样的最小最大表示法 //对于次数,就是循环节的个数,用kmp就能求出来 #include #include #include #include using namespace std ; const int maxn = 1e6+10 ; string str原创 2015-10-29 19:53:15 · 318 阅读 · 0 评论 -
hdu2594Simpsons’ Hidden Talents kmp水题
//给出两个字符串 //求第一个字符串的最长前缀是第二个 //字符串的后缀 //将两个字符串加在一起,再求一个Next数组就行 #include #include #include #include using namespace std ; const int maxn = 1e5+10 ; string s ; string p ; int Next[maxn] ; void get_next原创 2015-10-29 20:14:50 · 225 阅读 · 0 评论 -
hdu4300Clairewd’s message kmp
//给出密码的翻译表 //一段码文前面是密文,后面是明文 //现在有一个不完整的码文 //问其最短的可能的码文是什么 //将这个码文全翻译放在前面 //将其原来的码文放在后面 //求最后一个位置的最长前缀后缀 #include #include #include #include using namespace std ; const int maxn = 2e5+10 ; string s ;原创 2015-10-29 21:15:16 · 294 阅读 · 0 评论 -
hdu3746Cyclic Nacklace kmp补齐循环节
//给出一个字符串,问在其前或者其后最少需要添加几个 //字符才能使其为一个循环字符串 //kmp求出Next数组 //然后循环节的长度为n - Next[n] #include #include #include #include using namespace std ; const int maxn = 1e5+10 ; int Next[maxn] ; string p ; void ge原创 2015-10-31 12:02:46 · 255 阅读 · 0 评论 -
hdu4333Revolving Digits 扩展kmp
//给出一个长度为n的(n<<100000)字符串 //将这个字符串通过旋转可以得到n个字符串 //问这n个字符串有多少个不同的大于,等于,小于原来的字符串的个数 //通过将这个字符串t复制一个再其后面得到一个新的字符串s=t+t //在用扩展kmp求出新的字符串后缀与原来字符串的最长公共前缀 //对于ex[i]>=n肯定相等,否则只需要比较一下他们后面的一个数的大小 //至于重复次数可以用kmp原创 2015-10-31 13:40:35 · 298 阅读 · 0 评论