poj2752 Seek the Name, Seek the Fame(next数组的运用)...
                            
                            
                                分类:
其他好文   时间:
2014-08-13 22:33:37   
                                阅读次数:
320
                             
                    
                        
                            
                            
                                代码1:i 从 1 开始#includeusing namespace std;const int maxn=8;//输入的字符个数int main(){	int i,j;	int next[10];	char t[100]; for(i=1;i>t[i];	i=1;	next[1]=0; j=.....
                            
                            
                                分类:
其他好文   时间:
2014-08-13 14:24:46   
                                阅读次数:
247
                             
                    
                        
                            
                            
                                KMP的应用。直接使用s1产生next 数组,然后在s2中搜索s1,那么记录最后一个搜索到的数值,就是s1的前缀在s2中的最长后缀了。
本题应该不能直接调用strstr了吧。
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
...
                            
                            
                                分类:
其他好文   时间:
2014-08-12 19:09:14   
                                阅读次数:
192
                             
                    
                        
                            
                            
                                本题是KMP的next数组的灵活运用。
具体就是看最后整个数列的最后一个字母,能有多少前缀。
理解了next数组就很容易了。
#include 
#include 
#include 
using std::vector;
const int MAX_N = 400001;
char name[MAX_N];
int next[MAX_N], len;
void genNext()
{
...
                            
                            
                                分类:
其他好文   时间:
2014-08-12 17:16:54   
                                阅读次数:
237
                             
                    
                        
                            
                            
                                KMP的应用,不过查找的时候注意一点就够了:查找到一个子串的时候,直接跳过整个串,而不是使用next数组前跳,因为根据题意需要剪出小饰条,小饰条之间不能重叠。
const int MAX_N = 1001;
char txt[MAX_N], pat[MAX_N];
int next[MAX_N], len;
void genNext()
{
	for (int i = 1, j = 0...
                            
                            
                                分类:
其他好文   时间:
2014-08-12 17:11:34   
                                阅读次数:
197
                             
                    
                        
                            
                            
                                一道应用kmp算法中next数组的题目
这其中vis[i]从1加到n
vis[i]=[next[i]]+1;
#include
#include
#include
#include
#include
using namespace std;
char s[200005];
int b;
int next[200005];
int vis[200005];
void n...
                            
                            
                                分类:
其他好文   时间:
2014-08-08 09:42:11   
                                阅读次数:
168
                             
                    
                        
                            
                            
                                #include#includeint next[10005],lena,lenb;int a[1000005],b[10005];void set_naxt()//子串的next数组{ int i=0,j=-1; next[0]=-1; while(i<lenb) { ...
                            
                            
                                分类:
其他好文   时间:
2014-08-07 18:26:50   
                                阅读次数:
227
                             
                    
                        
                            
                            
                                这道题对更加深入地理解next数组有很大帮助。
基本思路:
        字符编号从0开始,那么if(i%(i-next[i])==0),则i前面的串为一个轮回串,其中轮回子串出现i/(i-next[i])次。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1358...
                            
                            
                                分类:
其他好文   时间:
2014-08-06 15:01:01   
                                阅读次数:
190
                             
                    
                        
                            
                            
                                题意是求第一个字符的前缀和后一个字符串的后缀最大的公共序列,并输出。。。
将两个字符串合并,求出kmp中的next数组就行,但要注意不要大于某个字符串的长度;
#include 
#include 
const int N = 50005;
#define min(a,b) ((a)
char s1[N], s2[N], s3[N * 2];
int next[N * 2];...
                            
                            
                                分类:
其他好文   时间:
2014-08-04 17:36:47   
                                阅读次数:
207