zoukankan      html  css  js  c++  java
  • KMP模板

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define mxn 1000001
    using namespace std;
    char T[mxn],P[10001];
    int f[mxn];
    void getfail(){
        int i,j,m=strlen(P);
        for(i=1;i<m;i++){
            int j=f[i];
            while(j&&P[i]!=P[j]) j=f[j];
            f[i+1]=P[i]==P[j]?j+1:0;
        }
    }
    void KMP(){
        int n=strlen(T),m=strlen(P);
        int i,j=0,ans=0;
        getfail();
        for(i=0;i<n;i++){
            while(j&&P[j]!=T[i]) j=f[j];
            if(P[j]==T[i])j++;
            if(j==m){
                ans++;
                //printf("%d
    ",i-m+2);
            }
        }
        printf("%d
    ",ans);
    }
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            memset(f,0,sizeof(f));
            memset(T,0,sizeof(T));
            memset(P,0,sizeof(P));
            scanf("%s%s",P,T);
            KMP();
        }
    }
  • 相关阅读:
    NYOJ458
    NYOJ67
    NYOJ105
    NYOJ1071
    NYOJ463
    C语言练字用小软件 — Practise_Calligraphy_1.0(ANSI)
    NYOJ276
    NYOJ455
    NYOJ74
    Jzoj4458 密钥破解——Pollard-rho
  • 原文地址:https://www.cnblogs.com/orzzz/p/7348666.html
Copyright © 2011-2022 走看看