zoukankan      html  css  js  c++  java
  • Hdu1711 Number Sequence--Kmp模板题

    #include<bits/stdc++.h>
    using namespace std;
    void read(int &x){
        x=0;int f=1;char ch=getchar();
        for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-f;
        for(;isdigit(ch);ch=getchar())x=(x<<1)+(x<<3)+ch-'0';x*=f;
    }
    #define write(x) printf("%d
    ",x)
    #define maxn 1005000
    int p[1005001],n,m,k,a[1005001],b[1005001],lena,lenb,j;
    int main()
    {
    read(k);
    while(k--)
    {
        p[1]=0;
        read(lena),read(lenb);
        j=0;
        for(int i=1;i<=lena;i++) 
            read(a[i]);
        for(int i=1;i<=lenb;i++) 
            read(b[i]);
        for(int i=2;i<=lenb;i++)
        {    
            while(j>0&&b[j+1]!=b[i]) j=p[j];    
            if(b[j+1]==b[i])j++;    
            p[i]=j;
        }
        j=0;
        bool bo=1;
        for(int i=1;i<=lena;i++)
        {
            while(j>0&&b[j+1]!=a[i])
            //如果匹配串第J个位置还可以滑动,且第j+1个位置与母串的第i个位置不匹配的话 
                j=p[j];
            //滑动
            if(b[j+1]==a[i]) 
                j++;
            if(j==lenb){printf("%d
    ",i-lenb+1);bo=0;break;}
        }
        if(bo) puts("-1");
    }
        return 0;
    }

    如果希望找到多个位置,Hdu2087剪花布条

    if(j==lenb)
    {
    ans++;
    printf("%d ",i-j+1)
    j=0;
    }

  • 相关阅读:
    BIO与NIO、AIO的区别
    Java虚拟机
    PV模型
    HashMap、HashSet源代码分析其 Hash 存储机制
    单节点到分布式集群
    Oracle表分区
    ZooKeeper原理
    oracle中的 exists 和 in 的效率问题
    OQL对象查询语言
    keepalived openssl 报错
  • 原文地址:https://www.cnblogs.com/cutemush/p/12252826.html
Copyright © 2011-2022 走看看