解题思路:
求前缀数组出现的次数之和,next[i] > 0 表示长度为next[i]的前缀又出现了一次。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define FOR(i,x,y) for(int i=x;i...
分类:
编程语言 时间:
2015-02-03 11:03:34
阅读次数:
221
解题思路:
依旧是利用next数组的性质,m % (m - next[m]) == 0;
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define FOR(i,x,y) for(int i=x;i<=y;i++)
u...
分类:
其他好文 时间:
2015-02-03 00:45:22
阅读次数:
142
解题思路:
利用next 数组的性质求解重复子串。循环节的长度为i - next[i];
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 1000000 + 10;
char s[maxn];
int n;
int next[...
分类:
其他好文 时间:
2015-02-01 19:12:28
阅读次数:
186
题目描述
给出一个字符串,求出存在多少子串,使得这些子串既是主串的前缀,又是主串的后缀。从小到大依次输出这些子串的长度。
Sample Input
ababcababababcabab
aaaaa
Sample Output
2 4 9 18
1 2 3 4 5
解题思路:
我们首先知道最大的那个数肯定是主串本身的长度。除去这个最大的应该是next...
分类:
编程语言 时间:
2015-01-30 22:50:46
阅读次数:
260
题目描述:
给定一个字符串,求其最大循环次数(即求最小循环节长度)
输入样例
abcd
ababab
aaaa
.
输出样例
1
3
4
解题思路:
KMP算法中next数组的应用。
len-next[len]表示的是字符串相同前缀空出来的一段,由next数组性质可知,这一段可以不断向前推出相等,所以只要判断len是否可以整除len-next[len]就可以了。否...
分类:
编程语言 时间:
2015-01-30 16:11:23
阅读次数:
311
KMP是众多字符串问题的基础理解next数组尤为重要next又称前缀数组 是 它所处位置的前一个位置的元素 与 该链 链首开始 几个元素相匹配(即相同)举个实例来说明:next对应的是该位置的前一个元素, 即next[i]对应a[i-1]因为-1头指针的存在 next均对应前一个 很重要next可以...
分类:
编程语言 时间:
2015-01-27 12:34:44
阅读次数:
180
这个题目一开始没想到用优先队列,或许说没学过优先队列,结果卡死了。然后看了别人的题解,原来如此,基本方法就是BFS。
优先队列的基本用法:http://blog.csdn.net/baochunzhi/article/details/7664422,讲解还是比较详细。
这题还有一个注意点就是如何输出,这里就要注意前后的关系,我是用next数组来表示前后两点的相对关系,具体可以见代码。输出的时候...
分类:
其他好文 时间:
2015-01-25 16:40:53
阅读次数:
213
看了两天KMP算法,不知道理解的对不,初步理解总结如下:(主要是各种next数组把自己整晕了,有彻底懂的大神们再给指导下)
首先是思路,“字符串匹配的KMP算法_知识库_博客园”http://kb.cnblogs.com/page/176818/,问题的关键落在求数组上,而求数组实际是对自身求匹配度,所以求next数组的子函数和主函数很类似,所以网上讨论的好像主要是两种next数组,最好把相...
分类:
编程语言 时间:
2015-01-20 10:29:13
阅读次数:
255
这道题不错,思维上不难想到规律,但是如何写出优雅的代码比较考功力。首先第一个人的序号可以确定,那么接下来所有奇数位的序号就可以一个连一个的确定了。然后a[i].first==0时的a[i].secod就是第二个人的序号,然后偶数位的序号也可以一个连一个的确定了。用一个next数组,其下标就是a[i]...
分类:
编程语言 时间:
2015-01-17 20:49:08
阅读次数:
194