zoukankan      html  css  js  c++  java
  • 扩展kmp模板

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<set>
    #include<vector>
    #include<queue>
    #include<map>
    #include<algorithm>
    #include<cmath>
    #include<stdlib.h>
    #include<time.h>
    using namespace std;
    #define mmax 100000+10
    void extendkmp(char *a,char *b,int m,int n,int *next,int *ret){
        int i,j,k;
        memset(next,0,sizeof(next));
        for(j=0;1+j<m&&a[j]==a[1+j];j++); next[1]=j;
        k=1;
        for(i=2;i<m;i++){
            int len=k+next[k],l=next[i-k];
            if(l<len-i){
                next[i]=l;
            }
            else{
                for(j=max(0,len-i);i+j<m&&a[j]==a[i+j];j++); next[i]=j;
                k=i;
            }
        }
        for(j=0;j<n&&j<m&&a[j]==b[j];j++); ret[0]=j;
        k=0;
        for(i=1;i<n;i++){
            int len=k+ret[k],l=next[i-k];
            if(l<len-i){
                next[i]=l;
            }
            else{
                for(j=max(0,len-i);j<m&&i+j<n&&a[j]==b[i+j];j++); ret[i]=j;
                k=i;
            }
        }
    }
    int main(){
        char p[mmax],q[mmax];
        int next[mmax],ret[mmax];
        while(cin>>p>>q){
            extendkmp(p,q,strlen(p),strlen(q),next,ret);
            for(int i=0;i<strlen(q);i++) cout<<ret[i]<<" ";
            cout<<endl;
        }
    }
  • 相关阅读:
    CF 461B Appleman and Tree
    POJ 1821 Fence
    NOIP 2012 开车旅行
    CF 494B Obsessive String
    BZOJ2337 XOR和路径
    CF 24D Broken robot
    POJ 1952 BUY LOW, BUY LOWER
    SPOJ NAPTIME Naptime
    POJ 3585
    CF 453B Little Pony and Harmony Chest
  • 原文地址:https://www.cnblogs.com/ainixu1314/p/4147129.html
Copyright © 2011-2022 走看看