• hdu--1711--kmp应用在整形数组--Number Sequence


    /*
        Name: hdu--1711--Number Sequence
        Author: shen_渊 
        Date: 16/04/17 19:58
        Description: 第一次知道,KMP能用在整形数组 o(╯□╰)o 
    */
    
    #include<cstring>
    #include<iostream>
    using namespace std;
    int kmp();
    void getFail();
    int n,m;
    int s1[1000009],s2[10009];
    int f[10009];
    int main()
    {
    //    freopen("in.txt","r",stdin);
        ios::sync_with_stdio(false);
        int T;
        cin>>T;
        while(T--){
            memset(s1,0,sizeof(0));
            memset(s2,0,sizeof(0));
            memset(f,0,sizeof(0));
            cin>>n>>m;
            for(int i=0; i<n; ++i)cin>>s1[i];
            for(int i=0; i<m; ++i)cin>>s2[i];
            if(n < m)cout<<"-1
    ";
            else cout<<kmp()<<endl;
        }
        return 0;
    }
    void getFail(){
        f[0] = 0;f[1] = 0;
        for(int i=1; i<m; i++){
            int j = f[i];
            while(j && s2[i] != s2[j]) j = f[j];
            f[i+1] = s2[i] == s2[j] ? j+1:0;
        }
    }
    int kmp() {
        getFail();
        int j=0;
        for(int i=0; i<n; ++i){
            while(j && s2[j] != s1[i]) j=f[j];
            if(s2[j] == s1[i]) j++;
            if(j == m) return i-m+2;
        }
        return -1;
    }
  • 相关阅读:
    包含min函数的栈
    栈的应用
    给定金额m和红包数量n
    顺时针打印矩阵
    二叉树的镜像
    elementUI table表头错位问题
    金额格式化
    ajax跨域问题全解
    JavaScript 的 this 原理
    vue技术分享-你可能不知道的7个秘密
  • 原文地址:https://www.cnblogs.com/langyao/p/6740577.html
Copyright © 2020-2023  润新知