zoukankan      html  css  js  c++  java
  • KMP算法

    next数组讲解推荐这个,讲的比较好:http://www.cnblogs.com/c-cloud/p/3224788.html

    hdu 1711

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<stack>
    using namespace std;
    #define N 1000100
    
    int n, m, Next[N], a[N], b[N];
    
    void makeNext()
    {
        int q, k;
        Next[0]=0;
    
        for(q=1, k=0; q<m; q++)
        {
            while(k>0 && b[q]!=b[k])
                k=Next[k-1];
            if(b[q]==b[k])
                k++;
            Next[q]=k;
        }
    }
    
    void kmp()
    {
        int i, q, f=0;
        makeNext();
        for(i=0, q=0; i<n; i++)
        {
            while(q>0&&a[i]!=b[q])
                q=Next[q-1];
            if(a[i]==b[q])
                q++;
            if(q==m)
            {
                f=1;
                printf("%d
    ", i+1-(m-1));
                break;
            }
        }
        if(!f)
            printf("-1
    ");
    }
    
    int main()
    {
        int T;
        scanf("%d", &T);
    
        while(T--)
        {
            memset(Next, 0, sizeof(Next));
            memset(a, 0, sizeof(a));
            memset(b, 0, sizeof(b));
            scanf("%d%d", &n, &m);
            for(int i=0; i<n; i++)
                scanf("%d", &a[i]);
            for(int i=0; i<m; i++)
                scanf("%d", &b[i]);
            kmp();
        }
        return 0;
    }
  • 相关阅读:
    【Intellij Idea】设置JDK
    MarkDown换行
    Git 查看/修改用户名、邮箱
    JavaScript对象
    Javascript事件
    第十次会议
    第九次会议
    详细设计文档
    第八次会议
    第七次会议
  • 原文地址:https://www.cnblogs.com/9968jie/p/6043770.html
Copyright © 2011-2022 走看看