zoukankan      html  css  js  c++  java
  • HDU 1711 Number Sequence

    http://acm.hdu.edu.cn/showproblem.php?pid=1711

    终于炼化了kmp算法,就算是现在我仍然惊异于字符串匹配居然存在线性时间的算法这种超出了我这种sb认知的东西。

    自己搞了N久,发现还是没有网上的模板写的好,这里直接收藏了。

    View Code
    #include <iostream>
    #include <queue>
    using namespace std ; 
    int n,m;
    int a[1000002],b[10002];
    int _next[1000002];
    void Init_()
    {
        int i,k;  
        i = 0; k = -1; _next[0] = -1;  
        while(i < m){  
            if(k == -1 || b[i] == b[k]){  
                i++;k++;  
                if(b[i] != b[k])  
                    _next[i] = k;  
                else  
                    _next[i] = _next[k];  
            }  
            else  
                k = _next[k];  
        }  
    }
    int kmp()
    {
        int i,j;  
        i = 0;j = 0;  
        while(i < n && j < m){  
            if(j == -1 || a[i] ==  b[j]){  
                i++;j++;  
            }  
            else  
                j = _next[j];  
        }  
        if(j == m)  
            return i-m+1;  
        return -1;  
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            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]);
            Init_();
            printf("%d\n",kmp());
        }
        return 0;
    }
  • 相关阅读:
    百斯特
    C++
    转载
    转载+整理
    转载
    转载
    转载
    C++
    转载
    CodeForces
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/2526163.html
Copyright © 2011-2022 走看看