zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    洛谷P1085 不高兴的津津
    为什么要学习算法
    洛谷P1001 A+B Problem
    计算机问题求解周期
    洛谷P1000 超级玛丽游戏
    洛谷P1421 小玉买文具
    CF359D Pair of Numbers(ST+二分)
    2020.10.7
    2020.10.10
    2020.10.8
  • 原文地址:https://www.cnblogs.com/langyao/p/6740577.html
Copyright © 2011-2022 走看看