• hdu2087


    hdu2087
    kmp模板题,在匹配文本串成功之后,模式串要跳整个自身的长度

    #include<iostream>
    #include<cstdio>
    #include<queue>
    #include<algorithm>
    #include<cmath>
    #include<ctime>
    #include<set>
    #include<map>
    #include<stack>
    #include<cstring>
    #pragma GCC optimize(2)
    #define inf 2147483647
    #define ls rt<<1
    #define rs rt<<1|1
    #define lson ls,nl,mid,l,r
    #define rson rs,mid+1,nr,l,r
    #define N 1000010
    #define For(i,a,b) for(int i=a;i<=b;++i)
    #define p(a) putchar(a)
    #define g() getchar()
    
    using namespace std;
    char a[N],b[N];
    int lena,lenb,ans;
    int kmp[N],k;
    void in(int &x){
        int y=1;char c=g();x=0;
        while(c<'0'||c>'9'){if(c=='-')y=-1;c=g();}
        while(c<='9'&&c>='0'){ x=(x<<1)+(x<<3)+c-'0';c=g();}
        x*=y;
    }
    void o(int x){
        if(x<0){p('-');x=-x;}
        if(x>9)o(x/10);
        p(x%10+'0');
    }
    
    void clear(){
        ans=0;k=0;
        memset(kmp,0,sizeof(kmp));
    }
    
    int main(){
        while(cin>>(a+1)){
            clear();
            if(a[1]=='#')
                return 0;
            cin>>(b+1);
            lenb=(int)strlen(b+1);
            lena=(int)strlen(a+1);
                For(i,2,lenb){
                    while(k&&b[k+1]!=b[i])
                        k=kmp[k];
                        if(b[k+1]==b[i])
                            k++;
                kmp[i]=k;
            }
            k=0;
            For(i,1,lena){
                while(k&&b[k+1]!=a[i])
                    k=kmp[k];
                if(b[k+1]==a[i])
                    k++;
                if(k==lenb){
                    ans++;
                    k=0;
                }
            }
            o(ans);p('
    ');
        }
        return 0;
    }
  • 相关阅读:
    模拟测试20190815(已更新)
    [JLOI2015]管道连接
    [BJWC2018]最长上升子序列
    [CQOI2012]局部极小值
    [HNOI2010]Bus 公交线路
    [BZOJ4903/CTSC2017]吉夫特
    [BZOJ3717/PA2014]Pakowanie
    [NOI2015]寿司晚宴
    [BZOJ4145/AMPPZ2014]The Prices
    [Usaco2013 Nov]No Change
  • 原文地址:https://www.cnblogs.com/war1111/p/11262941.html
Copyright © 2020-2023  润新知