zoukankan      html  css  js  c++  java
  • HDU

    原题链接

    KMP模板:AC,858ms,13112KB内存 消耗太大了

    #include<bits/stdc++.h>
    using namespace std;
    using namespace std;
    #define ms(x, n) memset(x,n,sizeof(x));
    typedef  long long LL;
    const int inf = 1 << 30;
    const LL maxn = 1e6 + 10;
    
    int s1[maxn], s2[maxn], n, m;
    int nxt[maxn];
    void getNext() {
        int i = 1, j = 0;
        while (i < m) {
            if (j == 0 || s2[i] == s2[j]) {
                ++i, ++j;
                if (s2[i] != s2[j]) nxt[i] = j;
                else nxt[i] = nxt[j];
            }
            else j = nxt[j];
        }
    }
    int kmp() {
        getNext();
        int i = 1, j = 1;
        while (i <= n && j <= m) {
            if (s1[i] == s2[j] || j == 0) ++i, ++j;
            else j = nxt[j];
        }
        if (j > m) return i - m;
        else return -1;
    }
    
    int main()
    {
        int T;
        cin>>T;
        while (T--) {
            ms(s1, 0); ms(s2, 0); ms(nxt, 0);
            cin>>n>>m;
            for (int i = 1; i <= n; i++)
                cin>>s1[i];
            for (int j = 1; j <= m; j++)
                cin>>s2[j];
    
            printf("%d
    ", kmp());
        }
        return 0;
    }
    
  • 相关阅读:
    java学习55天2020/8/29
    java学习51天2020/8/25
    java学习55天2020/8/31
    java学习49天2020/8/23
    java学习52天2020/8/26
    java学习48天2020/8/22
    2020.12.05
    2020.12.04
    2020.12.07
    2020.12.03
  • 原文地址:https://www.cnblogs.com/RioTian/p/13184355.html
Copyright © 2011-2022 走看看