zoukankan      html  css  js  c++  java
  • Codeforces 625B【KMP】

     题意就是一个串在另一个串出现几次,但是字符不能重复匹配, 比如aaaaaaa aaaa的答案是1
    思路:
    本来写了个暴力过的,然后觉得KMP改改就好了,就让队友打了一个;
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int MAX=1000010;
    int n,m;
    char a[MAX],b[MAX];
    int nextval[MAX];
    LL ans;
    void get_next(char b[],int m)
    {
        int i=0;
        nextval[0]=-1;
        int j=-1;
        while(i<m)
        {
            if(j==-1||b[i]==b[j])
            {
                ++i;
                ++j;
                if(b[i]==b[j])
                    nextval[i]=nextval[j];
                else
                    nextval[i]=j;
            }
            else
                j=nextval[j];
        }
    }
    void KMP(char a[],int n,char b[],int m,int nextval[],int pos)
    {
        int i=pos;
        int j=0;
        while(i<n)
        {
            if(j==-1||a[i]==b[j])
            {
                i++;
                j++;
                if(j==m)	//修改处
                {
                    j=0;
                    ans++;
                }
            }
            else
                j=nextval[j];
        }
    }
    int main()
    {
        int t,i,j;
        while(~scanf("%s%s",a,b))
        {
            int p;
            ans=0;
            
            n=strlen(a);
            m=strlen(b);
            get_next(b,m);
            KMP(a,n,b,m,nextval,0);
            printf("%lld
    ",ans);
        }
        return 0;
    }
    
    


  • 相关阅读:
    linxu 网络管理
    Linux 命令2
    crontab命令
    Linux 命令
    Linux 命令
    Git命令
    GIT
    Python 修改文件内容
    logging模块
    CSS 选择器
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/6777494.html
Copyright © 2011-2022 走看看